WinAPI のクリティカル セクションを同期メカニズムとして使用して、マルチスレッド コンソール アプリケーションを作成しています。5 つのスレッドを作成する必要があります。すべてのスレッドには、スレッドによって表示される独自の文字列があります。スレッドは、文字列を 1 つずつ順番に出力する必要があります。
だから、私はスレッド機能を持っています:
void thread_routine(void* data)
{
std::string* st = (std::string*)data;
while(1)
{
/* enter critical section */
std::cout << st; // not exactly that way, but I hope that you understood what I've meant.
Sleep(100);
/* leave critical section */
}
}
そして私の中でmain()
for(int i = 0; i < 10; ++i)
_beginthread(thread_routine, 0, strings[i]);
[o1]のようなものが表示されることを期待していました。
1) First thread
2) Second thread
3) Third thread
4) Fourth thread
5) Fifth thread
... and so on
しかし、この出力の代わりに[o2]のようなものを見ました:
1) First thread
1) First thread
3) Third thread
2) Second thread
5) Fifth thread
... and so on
スレッドがクリティカル セクションを通過する順序は不明であるため、セクションはランダムにキャプチャされますが、スレッドを同期して[o1]のような出力を取得する必要があります。それで、私は何をしなければなりませんか?パターンはありますか?