Est de Stimuler Fil du boost::unique_lock une étendue de serrure?
Je comprends que variable verrouillée par un boost::mutex::scoped_lock
est automatiquement déverrouillé lorsqu'il est hors de portée.
Comment sur boost::unique_lock
, le fait automatiquement déverrouiller la variable lorsqu'il est hors de portée?
Quelqu'un peut-il également de point de référence pour cette fonctionnalité.
double x;
boost::mutex x_mutex;
void foo()
{
{
boost::unique_lock<boost::mutex> lock(x_mutex);
x = rand();
}
...... some calculation which takes 10 second ......
...... is x still locked here??? ......
}
Grâce.
Oui, il est. La documentation est ici: boost.org/doc/libs/1_49_0/doc/html/thread/...
Si le destructeur n'a pas le déverrouiller, quand serait-il jamais être débloqué?
Ses dans le cas contraire ronde.
Si le destructeur n'a pas le déverrouiller, quand serait-il jamais être débloqué?
Ses dans le cas contraire ronde.
boost::mutex::scoped_lock
est un typedef de unique_lock
. boost.org/doc/libs/1_57_0/doc/html/thread/...OriginalL'auteur 2607 | 2012-02-29
Vous devez vous connecter pour publier un commentaire.
scoped_lock
est ununique_lock
. Dans le mutex.hpp:Le destructeur appelle
unlock()
si la serrure a été acquis. Donc, elle va sortir quand elle est hors de portée.Voir http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html
Aussi je vous remercie pour la référence, mais je suis un peu confus, ici, signifie-t-il destructeur est automatiquement appelée quand elle est hors de portée?
scoped_lock
est un typedef pourunique_lock<mutex>
. automatique vars déclarée dans un bloc {} sont détruits lors de la fin du bloc de prise de la RAII motif possible.Aussi, en C++11, ils ont réussi à se débarrasser de typedef, il est donc uniquement unique_lock maintenant.
OriginalL'auteur jspcal