C ++锁定作用域块的代码执行

时间:2018-12-06 17:29:10

标签: c++ c++11

我需要在作用域块上实现锁。我发现std :: lock_guard实现相同:

std::lock_guard

说明

  

尝试获得它所提供的互斥锁的所有权。何时控制   离开创建lock_guard对象的范围,   lock_guard被破坏,互斥体被释放

但是再次在这里声明

  

如果已拥有互斥锁的线程调用了锁,则   行为是不确定的:例如,程序可能会死锁。

std::mutex::lock

std :: mutex :: lock是否由std :: lock_guard内部调用-我有一种情况,当数据到达端口时,回调将调用成员方法-预期数据可以成倍地到达,当相关方法被一个回调执行时?

1 个答案:

答案 0 :(得分:0)

是的,lock_guard调用lock()来锁定互斥锁。 (它还可以工作吗?)如果您认为线程可以通过std::mutex或直接递归锁定lock_guard,则应该改用std::recursive_mutex,它没有这个弱点。