Почему мьютекс 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
, Это проблема, потому что в моей программе мне нужно выполнять асинхронную операцию, только если у потока есть исключительные права на блокировку. Так:
- Почему try_lock возвращает false, когда у меня есть этот мьютекс?
- Как создать блок кода, который выполняется только тем потоком, которому принадлежит блокировка?
1 ответ
Ваш код плохо оформлен. Любая попытка использовать рекурсивный мьютекс является признаком ошибки проектирования. В вашем коде вам нужно защитить нужный вам ресурс, и для вас не должно иметь значения, владеет ли ваш поток ресурсом в настоящее время или нет.