提高scoped_lock回报行为
boost scoped_lock return behavior
两个代码段是否产生相同的行为?我认为除非我缺少什么,否则它会。注意:我在任何地方都使用此指针只是为了澄清所有变量都是some_class的成员变量
int some_class::some_func()
{
boost::scoped_lock lock(this->m_mutex);
return this->member;
}
int some_class::some_func()
{
this->m_mutex.lock();
int a = this->member;
this->m_mutex.unlock();
return a;
}
一些
它们是如何做同样工作的,但是:这不仅仅是忘记调用unlock()
:当你的互斥锁被锁定时,可能会发生异常,并且你可能永远无法到达你对unlock()的调用,即使你在调用lock()和调用unlock()之间没有任何返回语句;喜欢:
m.lock() // m is a mutex
// do something
foo(); // If this throws an exception,that your mutex won't get unlocked
// do something
m.unlock()
Bur 在 scoped_lock
的情况下,scoped_lock
guard的析构函数将在堆栈展开期间被调用,确保关联的互斥锁始终被释放。
假设int a = this->member;
不会引发异常,情况是一样的。
相关文章:
- 尝试构建"lock-free"数据结构C++
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- 在 std::tie 中使用 std::weak_ptr::lock()
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- C++ 模板函数无法将"std:string"转换为"double"作为回报
- "lock cmpxchg"如何在装配中工作?
- 收益率和回报有何不同?
- std::lock 仍然导致死锁
- "expression cannot be used as a function"回报声明
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 我们是否需要对多线程 x32 系统使用 lock 来读取或写入 uint32_t 变量
- 我可以制作一个基于孩子具有不同回报的虚函数吗?
- 使用Mutex,lock_guard,在课堂中正确地lock
- 扣除指南的尾随回报类型不是专门化
- 为什么C++中没有无用的条件回报警告
- 早期回报构成功能的最简短方法
- 我可以使用 declval 来构造未使用的回报吗?