4

条件変数で待機操作を実行すると、すぐに返されることに気付きました。その結果、次のダミー コードを実行すると、1 つの CPU が 100% ループで使用されます。

int main(void) {

boost::condition_variable cond;
boost::mutex mut;
bool data_ready = false;

boost::unique_lock<boost::mutex> lock(mut);
while (!data_ready) {
    cond.wait(lock);
}


return 1;

}

cond.wait(lock)への呼び出しにより、スレッドが CPU を消費していない状態になると予想されますが、そうではありません。

では、どこに問題があるのでしょうか? 上記のコードは、ブーストのドキュメントから取得しました。

(ブースト1.44を使用しています)

ありがとう、

ギヨーム

4

2 に答える 2

3

Aは誤っcondition_variable::waitて返される場合があります。つまり、通知なしです。どのくらいの頻度で誤って返されるかは、実装の品質の問題です。

私のマシンで、あなたのコードを取得し、std::condition_variable (C++11 の新機能) を使用するように変更して実行しました。CPUを使用せずにハングしました。

お使いのプラットフォームでのブーストの実装 (ブーストにはウィンドウと pthread の実装が異なります) のように聞こえますが、通知を見逃さないように偽装して起動します。

于 2011-04-19T14:26:09.147 に答える
1

プログラムには他のスレッドがないため、スレッドライブラリがpthread_cond_wait()からすぐに戻るのは非常に正常です。そうしないと、プログラムは永久にスリープ状態になります。

于 2011-04-19T12:27:33.500 に答える