回答編集履歴
2
誤記訂正
test
CHANGED
@@ -50,7 +50,7 @@
|
|
50
50
|
|
51
51
|
訂正した回答:
|
52
52
|
|
53
|
-
デバッグプリント
|
53
|
+
デバッグプリントもまたスレッド上で動いている処理の一つですのでどのような順序で動くかは状況次第であることに注意すると何が起こっているかが推測できると思います。例えば以下の順序で動いたとするとご質問にある結果になり得ると思います。
|
54
54
|
|
55
55
|
- 要素数3の状態でpollが実行され要素数が3->2に変わった(A)
|
56
56
|
|
1
回答訂正
test
CHANGED
@@ -42,4 +42,26 @@
|
|
42
42
|
|
43
43
|
|
44
44
|
|
45
|
+
**以下の回答は回答者の勘違いでした: 失礼しました**
|
46
|
+
|
45
47
|
単に勘違いされているだけでしょうが、要素が2の状態でofferが動くときのご自分のコードをご覧ください。要素を追加した後でキューのサイズを印字していますね?ゆえに要素数が2のときにofferが動けば印字結果が3になることに不思議はないはずです。
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
訂正した回答:
|
52
|
+
|
53
|
+
デバッグプリントのスレッド上で動いている処理の一つですのでどのような順序で動くかは状況次第であることに注意すると何が起こっているかが推測できると思います。例えば以下の順序で動いたとするとご質問にある結果になり得ると思います。
|
54
|
+
|
55
|
+
- 要素数3の状態でpollが実行され要素数が3->2に変わった(A)
|
56
|
+
|
57
|
+
- (A)のデバッグプリントが印字された
|
58
|
+
|
59
|
+
- 要素数2の状態でofferが実行され要素数が2->3に変わった(B)
|
60
|
+
|
61
|
+
- 要素数3の状態でpollが実行され要素数が3->2に変わった(C)
|
62
|
+
|
63
|
+
- (C)のデバッグプリントが(先に)印字された
|
64
|
+
|
65
|
+
- (B)のデバッグプリントが(ようやくここで)印字された
|
66
|
+
|
67
|
+
|