Почему мьютекс try_lock возвращает false, даже если у вас есть мьютекс?

Рассмотрим этот простой код:

boost::mutex m;
m.lock();
bool locked = m.try_lock();
std::cout<< (!locked? "Can't use lock" : "Can use lock.")<<std::endl;
system("pause");

Код распечатки Can't use lock, Это проблема, потому что в моей программе мне нужно выполнять асинхронную операцию, только если у потока есть исключительные права на блокировку. Так:

  1. Почему try_lock возвращает false, когда у меня есть этот мьютекс?
  2. Как создать блок кода, который выполняется только тем потоком, которому принадлежит блокировка?

1 ответ

Ваш код плохо оформлен. Любая попытка использовать рекурсивный мьютекс является признаком ошибки проектирования. В вашем коде вам нужно защитить нужный вам ресурс, и для вас не должно иметь значения, владеет ли ваш поток ресурсом в настоящее время или нет.

Другие вопросы по тегам