mi sono imbattuto in questo paragrafo interessante nel Boost thread documentation oggi:sblocco spurie in filo di spinta
void wait(boost::unique_lock<boost::mutex>& lock)
...
Effetti: lock.unlock Atomicamente call() e blocca il thread corrente . Il thread verrà sbloccato quando viene notificato da una chiamata a questo-> notify_one() o this-> notify_all() o spuratamente. Quando il thread è sbloccato (per il motivo ), il blocco è riacquisito richiamando lock.lock() prima che la chiamata attenda i ritorni. Il blocco viene riacquisito anche richiamando lock.lock() se la funzione termina con un'eccezione.
Quindi quello che mi interessa è il significato della parola "spurio". Perché il thread dovrebbe essere sbloccato per motivi spuri? Cosa si può fare per risolvere questo?
Sembra che abbiamo trovato le stesse pagine, che non è del tutto inaspettato :) –
sì, questo è una sorta di riassunto della mia ricerca oggi quando ho capito la causa del bug orribile che ho stava soffrendo La documentazione di boost potrebbe essere più chiara su questo punto. –
Ho riscontrato un aumento dell'intero sistema per l'attesa e la notifica, specialmente in boost :: interprocess, è molto frustrante. Lo userei solo se ne hai bisogno per essere multipiattaforma e fatto ora. –