正确使用升力锁护-这两者是一样的吗?
Proper use of boost Lockguard - Are these two same
本文关键字:一样 更新时间:2023-10-16
我目前使用boost lockguard如下,但是我仍然对花括号的使用有点困惑。我想知道这两个是否相同
void ThreadSafeMethod()
{
{//Begin Lock
boost::lock_guard<boost::mutex> lock(mutex_lock_symbol);
....
....
}//End Lock
}
或者这个方法,它消除了一层花括号。这是正确的,和上面一样吗?
void ThreadSafeMethod()
{//Locks automatically
boost::lock_guard<boost::mutex> lock(mutex_lock_symbol);
}//Unlocks
boost::lock_guard
结构实现了RAII习惯用法(资源分配是初始化),因此在构造时自动锁定,在销毁时自动解锁。发生这种情况的时间取决于通常的c++规则,即当结构离开创建boost::lock_guard
的作用域时。
void TestFunction( void ) {
// Do non-blocking operations:
{
// Lock the Mutex:
boost::lock_guard<boost::mutex> lockGuard( mutex_lock_symbol );
// Do blocking operations
} // Exit scope the boost::lock_guard was created in and therefore destroy it (thus unlock the mutex)
// Do more non-blocking operations:
}
这只是帮助您通过创建boost::lock_guard
创建的新作用域来控制互斥锁的操作数量。boost::lock_guard
的另一个优点是它是异常安全的。
在你给出的两个例子中,因为在第一个例子的作用域之外没有其他代码,所以这两个例子的功能是相同的。
是的,它们是一样的,只要你不在内花括号后面添加任何代码。
基本上,花括号限制了lock_guard存在的范围,从而限制了它何时解锁。如果没有内部大括号,它将在函数退出时解锁;和他们在一起,当它离开内部块。但是,由于在您的示例中,在离开块和离开函数之间没有发生任何事情,因此它们是相同的。
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 为什么在C++中对链表这样做?(像堆叠一样处理它们)
- 堆栈和队列是否像C++中的数组一样传递?
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- 访问数据成员(本身是对象)的数据成员,就好像它们是类成员一样
- 我们可以将集合的值存储在变量中吗?就像我们可以将数组的值存储在变量中一样
- 我如何在C++像在 Python 中一样实现 f 字符串?
- 自制的上衣:看起来一样,但不完全相同
- 如何使用 redis-plus-plus 存储二进制数据,就像我想存储结构一样?@for_stack?
- 如何像在 C++ 中处理数组一样对 .txt 文件中的字符进行寻址?
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 像 CPP 中的控制台一样的应用程序
- 为什么C++中没有常量引用,就像常量指针一样?
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 有没有像给定的一样的 std::optional_function
- Java 是否像C++模板一样具有泛型推论?
- 记忆栅栏和记忆屏障是一样的吗
- 对象作为参数传递,就好像我们正在传递构造函数值一样
- 像自定义类一样构造的指针(内置类型)如何工作?
- JavaScript箭头函数:我们能否像C ++ lambdas一样捕获值