Как настроить неблокируемый unique_lock?

0

Я нашел в документах, что unique_lock может попробовать "получить блокировку неблокирующимся способом".

Это unique_lock поток, который не заблокирован, поскольку он пытается получить блокировку в "неблокирующем режиме"? Если да, то это просто изящно терпит неудачу? unlock?

Кроме того, поскольку notify_one не выбрасывает, значит ли это, что если он не может уведомить об этом, он также потерпит неудачу?

Если unique_lock можно установить, чтобы не ждать успешной lock но изящно терпеть неудачу и двигаться с грациозными отказами для unlock и notify_one, как можно установить unique_lock таким образом?

Теги:
multithreading
boost
blocking
locking

1 ответ

1
Лучший ответ

Что-то вроде boost::unique_lock lock(my_lockable, boost::try_to_lock); должен сделать трюк.

lock.owns_lock() вернет true, если блокировка была приобретена. Если он не был приобретен, вы не должны пытаться его освободить.

Всегда должно быть безопасно вызывать notify_one даже если ни одно условие не ждет его.

  • 0
    Красивый! Большое спасибо Марк Б.!
  • 0
    Правильно ли, что notify_one завершится неудачно? Я все еще очень нуб. Большое спасибо заранее!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню