質問編集履歴
2
説明追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -30,7 +30,7 @@
|
|
30
30
|
|
31
31
|
調査したところ job を実行する側の while (!jobs.empty()) {...} のループから抜ける(実際には while(1) {...} の完了)まで待っているようでした。
|
32
32
|
|
33
|
-
unique_lockで取得したロックが解放されていないからだろうと思い、下記のようにunique_lockを中括弧 { } で囲こみ、中括弧から抜ける際に unique_lock のデストラクタが呼ばれてロックが解放されるのを期待
|
33
|
+
unique_lockで取得したロックが解放されていないからだろうと思い、下記のようにunique_lockを中括弧 { } で囲こみ、中括弧から抜ける際に unique_lock のデストラクタが呼ばれてロックが解放されるのを期待して実装しました。
|
34
34
|
```c++
|
35
35
|
改修版:キュー内のjobをひらすら実行するロジック (ワーカースレッドにて実行)
|
36
36
|
while(1) {
|
1
質問内容変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -46,13 +46,13 @@
|
|
46
46
|
}
|
47
47
|
```
|
48
48
|
結果はビンゴでした。
|
49
|
-
ここで質問なのですがこれは問題ないのでしょうか?
|
50
|
-
ネットの情報やサンプルをいろいろ探してもこのようにしているものが見つからなかったの心配でして。
|
51
|
-
あと、condition_variableのwait関数はスレッドが待ちに入った瞬間にそのスレッドが保持しているlockを開放すると思ったのですがそのような機能はないのでしょうか? (javaと混乱しているような気もしないでもないのですが...)
|
52
49
|
|
53
|
-
纏めますと質問は2つあり、
|
54
|
-
|
50
|
+
ここで質問なのですがこのように中括弧にてロックが解放されるようにしても問題ないのでしょうか?
|
55
|
-
|
51
|
+
わざわざワーカースレッドを利用しているのはjobの処理を待ちたくないから利用しているのにjobを追加する際に待っていては本末転倒でして・・・。
|
56
|
-
となります。
|
57
52
|
|
53
|
+
今書いていて思ったのですが job キューの更新中に job が追加されることがあるので危険かもしれないですね・・・。
|
54
|
+
んー、解決策が分からないです。
|
55
|
+
|
56
|
+
よくあるケースだと思うのですがネットでは一歩踏み込んだ良い例が見つからずでして。
|
57
|
+
|
58
58
|
以上、どうぞよろしくお願いいたします。
|