Existe-t-il un moyen de savoir std::lock_gaurd
appeler try_lock
au lieu de lock
lorsqu'il acquiert le mutex?
La seule façon dont je pouvais penser est d'utiliser std::adopt_lock
:
if (!_mutex.try_lock())
{
// Handle failure and return from the function
}
std::lock_guard<my_mutex_class> lock(_mutex, std::adopt_lock);
Existe-t-il une solution intégrée à mon problème plutôt que d'acquérir le verrou explicitement et de donner ensuite lock_guard
la responsabilité de le publier?
Un design de base invariant de lock_guard
Est qu'il détient toujours le verrou. Cela minimise la surcharge car son destructeur peut appeler inconditionnellement unlock()
, et il n'a pas à stocker d'état supplémentaire.
Si vous avez besoin du comportement de verrouillage, utilisez unique_lock
:
std::unique_lock<std::mutex> lock(_mutex, std::try_to_lock);
if(!lock.owns_lock()){
// mutex wasn't locked. Handle it.
}