Sto considerando di usare i thread C++ 0x nella mia applicazione invece dei thread Boost. Tuttavia, non sono sicuro di come reimplementare ciò che ho con thread standard di C++ 0x dal momento che non sembrano avere un metodo interrupt()
.Come interrompere un thread C++ 0x in attesa?
La mia messa a punto corrente è:
- un filo master che gestisce il lavoro;
- diversi thread di lavoro che eseguono i comandi del master.
I lavoratori chiamano wait()
su almeno due diverse variabili di condizione. Il Maestro ha uno stato "scaduto": in questo caso dice a tutti i lavoratori di fermarsi e dare qualsiasi risultato abbiano ottenuto. Con il master Boost Thread utilizza solo interrupt_all()
in un gruppo di thread, il che fa sì che i lavoratori smettano di aspettare. Nel caso in cui non stiano aspettando al momento, il master imposta anche un flag bool
che i lavoratori controllano periodicamente.
Tuttavia, in C++ 0x std::thread
non vedo alcuna sostituzione per interrupt()
. Mi manca qualcosa? In caso contrario, come posso attuare lo schema di cui sopra in modo che i lavoratori non possano semplicemente dormire per sempre?
Penso che continuerò a utilizzare i thread Boost. Sono anche buggy, ma almeno ho un workaround stabile per loro. – doublep