Ich denke, mein Programm hat einen Fehler, weil manchmal, wenn ich mein Programm ausführen, gibt es eine niedrigere Zahl als 30000, wie 29999. Aber manchmal läuft es richtig und erreicht die 30000. Meine Frage ist, wie kann ich das beheben und warum ist es passiert.Warum endet mein Thread-Zähler nicht immer?
#include <iostream>
#include <thread>
using namespace std;
int counter;
int i;
void increment()
{
counter++;
}
int main()
{
counter = 0;
cout << "The value in counter is : " << counter << endl;
thread tarr[30000];
for (i = 0; i < 30000; i++)
{
tarr[i] = thread(increment);
}
for (i = 0; i < 30000; i++)
{
tarr[i].join(); //main thread waits for tarr to finish
}
cout << "After running 30,000 threads ";
cout << "the value in counter is : " << counter << endl;
return 0;
}
Der Schritt ist vollständig * * unbewacht und ein Rezept für eine Race-Bedingung. Und Sie sollten dankbar sein, dass fast alle Ihre Threads so schnell fertig sind wie sie, denn 30000 Threads sind ungefähr 27000 mehr als die meisten Desktop-Betriebssysteme, ohne dass sie sich selbst übergeben und sich zu einem alptraumhaften Stillstand bewegen müssen. – WhozCraig
@aghilpro die Threads sind alle bereits vor den letzten zwei 'Cout' Dumps verbunden. Was denkst du, denkst du, dass ein "Schlaf" ausreichen wird? – WhozCraig
Nach einem guten Schlaf ist es oft besser. Du erwachst erfrischt und bereit für einen weiteren Blick auf den Code und ... Oh Schlaf. Ja, das wäre nicht sehr hilfreich. – user4581301