ich habe einen solchen CodeSynchonisation 2 Themen C++ linux
#include <iostream>
#include <thread>
#include <mutex>
#include <iostream>
#include <unistd.h>
using namespace std;
bool isRunning;
mutex locker;
void threadFunc(int num) {
while(isRunning) {
locker.lock();
cout << num << endl;
locker.unlock();
sleep(1);
}
}
int main(int argc, char *argv[])
{
isRunning = true;
thread thr1(threadFunc,1);
thread thr2(threadFunc,2);
cout << "Hello World!" << endl;
thr1.join();
thr2.join();
return 0;
}
wenn Sie diesen Code ausgeführt ich warte Ausgabe wie zu bekommen:
1
2
1
2
1
2
1
2
...
aber ich dont't dass bekommen und wie etwas bekommen Sie stattdessen:
1
2
1
2
2 <--- why so?
1
2
1
und wenn ich diesen Code ausführen unter Windows mit #include <unistd.h>
-ersetzenund sleep(1)
-Sleep(1000)
der Ausgang i erhalten, ist genau das, was ich will, das heißt 1212121212.
Warum so ist und wie das gleiche Ergebnis auf Linux zu erreichen?
okay, es ist klar, aber wie man fortlaufenden Druck von diesen Threads erreichen? Welche Synchronisationsmechanismen sollten verwendet werden? – borune
Ich habe meine Antwort aktualisiert – kjohri
du bist ein Gott des Muttithreading! – borune