私はVisual Studio 2012とC++ 11を使用しています。この場合、std :: thread C++。より多くのスレッド同じデータ
void client_loop(bool &run)
{
while (run);
}
int main()
{
bool running = true;
std::thread t(&client_loop,std::ref(running));
running = false ;
t.join();
}
、スレッドt
のループが終了したことがないが、私は明示的にfalse
にrunning
を設定します。私はこれが動作しない理由を理解しません。 run
とrunning
の位置は同じです。私はrunning
を単一のグローバル変数として設定しようとしましたが、何も起こりません。私はポインタ値を渡すことを試みたが、何もしなかった。
スレッドは同じヒープを使用します。私は本当に理解していない。誰でも助けてくれますか?それはrunning
変数のデータレース(1つのスレッドが、別のスレッドがそれを読み、それを書き込み)を導入しているため
プログラムの終了が早すぎて興味深いものを観察することができません。 –
いいえ、私はこの例 "t.join()"で書くのを忘れていました.. :) –
'running'を' volatile'に設定するとどうなりますか? – didierc