为什么即使你拥有互斥锁,互斥锁try_lock也会返回false?

时间:2015-11-04 15:18:57

标签: multithreading boost-mutex

考虑这个简单的代码:

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 个答案:

答案 0 :(得分:-1)

你的代码设计很糟糕。任何使用递归互斥锁的尝试都表明存在设计错误。在您的代码中,您需要保护所需的资源,如果您的线程当前拥有资源,则无关紧要。