6d2a6c34e68779c639eb089f6d2415ae-610x343

1: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 07:39:42.757 ID:jG/qelcu0.net
バリアーが役に立つケースってどんなの?
サンプルプログラムを書こうとしてる

2: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 07:41:28.366 ID:CMboZjJtE.net
バリアーフリーって言葉があるだろ?つまり自由だよ

3: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 07:42:58.989 ID:jG/qelcu0.net
バリアーってのはスレッドの集合地点
例えば5つのスレッドが待ち合わせるバリアーを作成して
5つのスレッドに処理を分割する
そしてすべてのスレッドが処理を完了するのを待つ

4: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 07:48:16.577 ID:jG/qelcu0.net
スレッドの処理の完了を待つ機能は別にあって
それとは別にバリアーが役に立つケースが思いつかない

他の言語でも同じような概念はあるはずだけどJavaのCountDownLatchな

5: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 07:55:08.102 ID:vHLGBA9A0.net
知らんけど全部のスレッドの処理が完了した後に処理したい場合とかじゃね

6: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 07:56:52.832 ID:vLNEF6nV0.net
役に立つというより
やっとかなきゃあかんて感じじゃね?

そこまでシビアな同期を要するもんを作ったことないけど

7: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 07:57:25.529 ID:jG/qelcu0.net
そうなんだろうがその具体的なケースが思いつかな

あと言い忘れたけどCountDownLatchは一回集合したら常に通れるようになるから
もう一回待ち合わせるのに使うことはできない

8: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:00:39.233 ID:CMboZjJtE.net
覚えたての言葉を使いたい年頃なんだろなと思いました。

9: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:05:03.364 ID:jG/qelcu0.net
マルチスレッドについて詳しい人来てくれー

10: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:06:54.319 ID:6WaFToqQ0.net
時間のかかる処理をするときに使うんだよ

11: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:12:06.385 ID:jG/qelcu0.net
具体的なケースで頼む

複数の配列のそれぞれを合計するようなときに使うのかと思ったけど
それならスレッドの終了を待つ(join())でできるからバリアーの意味が分からない

待ち合わせの後に後続の処理を実行するってことなんだろうが
それってどんなケースなんだ?

12: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:13:11.573 ID:vLNEF6nV0.net
妄想だけど、例えばゲーム開発とかで
プレステ版でもWiiU版でも開発するときに
本体(CPU)が違うけど同じソースコードを使いたいとき
CPUの挙動に依存させないためにバリアしとく
とか

14: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:20:36.268 ID:jG/qelcu0.net
>>12
その処理って何だろう?

13: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:14:50.386 ID:6WaFToqQ0.net
そんな小難しい事考えずに、例えばウェブ巡回とか考えてみなよ
1スレッドで1件1件回るより、複数スレッドで手分けした方が速いじゃん
それに巡回終わったあとに何か処理動かしたいなら、待ち合わせしないとダメだろ?

15: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:22:17.019 ID:jG/qelcu0.net
>>13
巡回終わったあとの処理って?

処理が完了するのを待つのはjoin()でできる
待ち合わせ後も各スレッドで処理をしたいケースが思いつかん

16: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:25:04.851 ID:dJVGTdR40.net
100のホームページの巡回をしなければいけない
5つのスレッドしか作れない
時々サーバーが死んでいるためかレスポンスが返ってこないホームページがある
なんて場合とか

17: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:27:41.167 ID:jG/qelcu0.net
>>16
それはエラーハンドリングのやり方じゃないかなあ

18: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:52:33.096 ID:jG/qelcu0.net
プログラム自慢はおらぬか?

19: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:55:12.412 ID:/DeFP3oea.net
画像処理の分割とか

20: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 08:59:50.611 ID:jG/qelcu0.net
分割して並行して実行するのはいくらでも想像できる
でも、分割→処理→待ち合わせ→後続処理ってケースがどういうケースか分からん
分割→処理→完了待ち→後処理は分かるんだが

22: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:03:28.048 ID:mmK4c7Kup.net
>>20
統計出したりとかいるだろ
複数スレッドで各板回って、合計未読レス数出すとか

24: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:06:21.381 ID:jG/qelcu0.net
>>22
複数スレッドで各板回って情報収集する
処理完了
集計する

で十分

スレッドの待ち合わせ+分割したスレッドを残す、の両方が必要だからこそバリアーを使うなはず

29: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:16:22.884 ID:+w8Dn9Ajp.net
>>24
Joinだとスレッド死なないとダメじゃん
スレッドプールで処理するなら使えない

31: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:20:26.603 ID:jG/qelcu0.net
>>29
スレッドプールで繰り返し処理するならそのたびに待ち合わせができる必要がある
CountDownLatchは一回しか待ち合わせに使えない
繰り返し待ち合わせることができるCyclicBarrierは別にある

21: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:00:58.313 ID:euK2dD/X0.net
他のやり方でもできるけどバリアでもできるってだけの話だろ

27: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:12:46.545 ID:jG/qelcu0.net
>>21
そうかもしれないけど正確な回答ではない
もともと何かの目的があって作られた機能のはず
スレッドの終了を待つ機能は最初からあったみたいだから
それでは対応できないケースがあったと思われる

23: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:05:56.553 ID:/DeFP3oea.net
スレッド生成のコストがなくなるとかじゃね

25: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:07:24.283 ID:jG/qelcu0.net
>>23
それはバリアーのメリットなんだが
後続の処理があるからこそスレッドが残ってる意味がある
それってどんなケースか思いつかない

26: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:12:08.960 ID:/DeFP3oea.net
>>25
段階別のエラーチェックとかは?

28: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:13:16.120 ID:jG/qelcu0.net
>>26
どういうこと?

32: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:21:12.516 ID:WSuRkjJqp.net
バリア 「みんな席について」
スレッドたち 「ガヤガヤ」
バリア 「はい、みんなが静かになるまで今までかかりました。起立、気おつけ、礼。気をつけて帰ってね」
スレッドたち 「ザワザワ」
こういう事だ

34: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:23:06.930 ID:jG/qelcu0.net
>>32
なるほど分からん

35: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:23:11.769 ID:7U21HuaSp.net
>>32
なにいってんだこいつ

33: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:22:28.852 ID:/DeFP3oea.net
共通の認証チェックが必要な時とか?
認証は別スレッドでやってその結果を使って他のスレッド各処理を続行するとか

37: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:27:47.716 ID:jG/qelcu0.net
>>33
そうだなあ
メインスレッドが作業用スレッドを生成
作業用スレッドは準備作業の完了を待つ
メインスレッドは準備作業を実行
作業用スレッド処理開始
ってのはあるだろうな

38: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:30:05.260 ID:jG/qelcu0.net
https://docs.oracle.com/javase/jp/8/api/java/util/concurrent/CountDownLatch.html
の最初のDriverのコードの実際の例が思いつかないのよねー

メインスレッドが作業用スレッドを生成
作業用スレッドは準備作業の完了を待つ
メインスレッドは準備作業を実行
作業用スレッド処理開始
作業用スレッドの処理がある箇所に到達するのを待ち合わせる
すべての作業用スレッドが待ち合わせ地点に到着する
後続の○○の処理を実行する

ってことなんだけどそれってどんな処理なんだか思い付かない

39: 以下、\(^o^)/でVIPがお送りします 2015/08/15(土) 09:31:02.517 ID:dCWZqjBep.net
思い付かないならいいんじゃない
まだ勉強する時期じゃなかったということだ

引用元
http://viper.2ch.sc/test/read.cgi/news4vip/1439591982/