Я нашел в документах, что unique_lock
может попробовать "получить блокировку неблокирующимся способом".
Это unique_lock
поток, который не заблокирован, поскольку он пытается получить блокировку в "неблокирующем режиме"? Если да, то это просто изящно терпит неудачу? unlock
?
Кроме того, поскольку notify_one
не выбрасывает, значит ли это, что если он не может уведомить об этом, он также потерпит неудачу?
Если unique_lock
можно установить, чтобы не ждать успешной lock
но изящно терпеть неудачу и двигаться с грациозными отказами для unlock
и notify_one
, как можно установить unique_lock
таким образом?
Что-то вроде boost::unique_lock lock(my_lockable, boost::try_to_lock);
должен сделать трюк.
lock.owns_lock()
вернет true, если блокировка была приобретена. Если он не был приобретен, вы не должны пытаться его освободить.
Всегда должно быть безопасно вызывать notify_one
даже если ни одно условие не ждет его.
notify_one
завершится неудачно? Я все еще очень нуб. Большое спасибо заранее!