临界截面的多层化是否有效?
Is it valid to mutilayered a critical section?
例如,这是否有效?
CRITICAL_SECTION cs_A;
CRITICAL_SECTION cs_b;
::InitializeCriticalSection( &cs_A );
::InitializeCriticalSection( &cs_B );
::EnterCriticalSection( &cs_A ); // First level
/* do some stuff with A */
::EnterCriticalSection( &cs_B ); // Second level
/* do some stuff with A and B */
::LeaveCriticalSection( &cs_B ); // Second level
/* do some stuff with A */
::LeaveCriticalSection( &cs_A ); // First level
::DeleteCriticalSection( &cs_A );
::DeleteCriticalSection( &cs_B );
我想用两个临界区保护两段代码。我可以这样做吗?
可能的重复:嵌套临界区有效吗?
当您有多个锁并且可能在一个时间点持有多个锁时,您必须确保总是以相同的顺序获得锁。如果没有注意到这一点,可能会导致死锁。
这是一个广为人知并被广泛讨论的规则。例如,使用锁层次结构来避免死锁
我认为你的问题与你提到的问题不同,因为你有两个不同的关键部分。
无论如何,你可以嵌套它们,但你必须注意输入/获取它们的顺序总是相同的,否则你会冒死锁的风险。
相关文章:
- 如果变量名称不跟在 char* 后面,const char* 是否有效?
- 钳制迭代器是否有效
- 检查由括号、方括号和大括号组成的一组方括号是否有效?
- 在函数内创建的对象的范围 - 如果在函数外部存储和访问引用,它们是否有效?
- 模板签名解析为 void(void) 被 GCC 拒绝;这是否有效C++?
- 我如何知道作为参数的size_t在函数中是否有效?
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 此递归模板类型定义是否有效C++?
- 将 C 函数转换为 C++ 以检查数字是否有效
- 函数参数的名称与调用函数时使用的变量相同是否有效?
- 如何检查输入是否有效?
- 如何检查用户的输入是否有效以及我正在寻找的数字?
- 在函数中按值传递 unordered_map/unordered_set 是否有效? C++
- 如何检查isupper(cstr)是否有效?
- 将 std::transform 与 std::back_inserter 一起使用是否有效?
- 只需要知道我在c ++中打印模式的方式是否有效,或者有另一种方法可以有效地做到这一点
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 创建加密安全密码.并验证它是否有效