Ich überlege, C++ 0x-Threads in meiner Anwendung anstelle von Boost-Threads zu verwenden. Ich bin mir jedoch nicht sicher, wie ich das, was ich mit Standard-C++ - 0x-Threads habe, neu implementieren würde, da sie anscheinend keine interrupt()
-Methode haben.Wie unterbricht man einen wartenden C++ 0x-Thread?
My aktuellen Einstellung ist:
- ein Master-Faden, der Arbeit schafft;
- mehrere Worker-Threads, die die Befehle des Masters ausführen.
Arbeiter rufen wait()
auf mindestens zwei verschiedenen Zustandsvariablen. Der Meister hat einen "Zeitlimit" -Zustand: In diesem Fall sagt er allen Arbeitern, dass sie anhalten und geben sollen, was auch immer sie bis dahin bekommen haben. Mit Boost-Threads verwendet der Master einfach interrupt_all()
für eine Thread-Gruppe, was dazu führt, dass die Worker nicht mehr warten. Falls sie im Moment nicht warten, setzt der Master auch eine bool
Flagge, die Arbeiter regelmäßig überprüfen.
In C++ 0x std::thread
sehe ich keinen Ersatz für interrupt()
. Vermisse ich etwas? Wenn nicht, wie kann ich das obige Schema implementieren, damit die Arbeiter nicht für immer schlafen können?
Ich denke, ich werde Boost-Threads dann weiter verwenden. Sie sind auch fehlerhaft, aber zumindest habe ich einen stabilen Workaround für sie. – doublep