回答編集履歴

1

誤った解答を訂正

2016/05/07 11:18

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

test CHANGED
@@ -249,3 +249,29 @@
249
249
 
250
250
 
251
251
  詳しく調べてはいませんが、生成するスレッドの数が多すぎて、途中で死んでいるものがあるのかもしれません。
252
+
253
+
254
+
255
+ # 訂正
256
+
257
+ > ちなみに、変数countは、読み取り時も同期化する必要があります。
258
+
259
+
260
+
261
+ は誤り。
262
+
263
+
264
+
265
+ なぜなら、`CountDownLatch`クラスは以下を保証しているため。
266
+
267
+ > メモリー整合性効果:countDown() を呼び出す前のスレッド内のアクションは、別のスレッド内の対応する await() から正常に復帰したあとのアクションよりも happen-before です。
268
+
269
+
270
+
271
+ [https://docs.oracle.com/javase/jp/6/api/](https://docs.oracle.com/javase/jp/6/api/)
272
+
273
+
274
+
275
+ "happens-before"については、以下を参照。
276
+
277
+ [https://docs.oracle.com/javase/specs/jls/se6/html/memory.html#17.4.5](https://docs.oracle.com/javase/specs/jls/se6/html/memory.html#17.4.5)