join()
とスレッドを同期させる場合、呼び出しの順序を考慮して、t2
の後に出力がt1
になるのはなぜですか。スレッド結合C++の動作
すなわち
#include <thread>
void callFromThread(int id) {
int i = 1000;
while(i != 0) {
printf("%s %d\n", "hi from thread", id);
i--;
}
}
int main(void) {
std::thread t1 (callFromThread, 1);
std::thread t2 (callFromThread, 2);
t1.join();
t2.join();
printf("%s\n", "bye from main!");
return 0;
}
私は残りのt2の出力に続いて、残りのすべてのT1の出力に続いて参加通話、前に最初にいくつかのインターリーブを持っていた場合、私は行動の意味を作ることができます。しかし、代わりに私はすべてのt2を見ていますし、すべてのt1を見ています。
参加の順序は、以前の実行履歴とは関係がないためです。特定の実行順序が必要な場合は、なぜスレッドを使用していますか? – EJP
@EJP、それを得るにはしばらく時間がかかりましたが、はい、これは起こっていることの適切な精神モデルです。 – wulfgarpro