mutex.verrouillage vs unique_lock
Quand dois-je préfère le premier morceau de code pour la deuxième, et ils n'ont pas de différences fondamentales
std::mutex mtx;
mtx.lock();
... //protected stuff
mtx.unlock();
... //non-protected stuff
mtx.lock();
... //etc
et
std::mutex mtx;
std::unique_lock<std::mutex> lck(mtx);
... //protected stuff
lck.unlock();
... //non-protected stuff
lck.lock();
... //etc
Je ne comprends que lock_guard est fondamentalement un unique_lock sans la verrouiller et déverrouiller des fonctions, mais je vais avoir des moment difficile différencier un mutex et d'une serrure à l'aide d'un mutex.
- Très liées: stackoverflow.com/questions/22873082/...
Vous devez vous connecter pour publier un commentaire.
Oui, le
std::unique_lock
appels de déverrouillage sur le mutex dans son destructeur.L'avantage de ceci est que dans le cas où une exception est levée, vous êtes sûr que le mutex de débloquer au moment de quitter le champ où la
std::unique_lock
est défini.Pensez-y de cette façon:
... beaucoup plus tard ...