包含另一个关键部分的关键部分
Critical section containing another critical section?
是否允许像下面这样嵌套关键部分?
void somefunction()
{
EnterCriticalSection(&g_List);
...
EnterCriticalSection(&g_Variable);
...
LeaveCriticalSection(&g_Variable);
...
LeaveCriticalSection(&g_List);
}
是的,这是可以接受的。 对于任何稍微复杂的程序来说,在某些地方有很多层嵌套是常态。
您需要注意的一件事是,您必须始终以相同的顺序进行锁定。
如果不这样做,则在以下情况下可能会出现死锁
线程 A 运行如下代码:
EnterCriticalSection(&g_List);
EnterCriticalSection(&g_Variable);
...
LeaveCriticalSection(&g_Variable);
LeaveCriticalSection(&g_List);
但线程 B 运行
EnterCriticalSection(&g_Variable);
EnterCriticalSection(&g_List);
...
LeaveCriticalSection(&g_List);
LeaveCriticalSection(&g_Variable);
这可能会导致死锁,线程 A 锁定g_List
然后阻止等待g_Variable
,而线程 B 已锁定g_Variable
并被阻止等待g_List
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 运行同一解决方案的另一个项目的项目
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 从另一个 cpp 文件更改结构内、映射键内的变量
- 打印对象的映射,其中另一个对象作为键
- 如何将键和值从映射传输到另一个映射?
- 即使另一个应用具有焦点,检测F1密钥的按键(和覆盖)键
- 将映射的每个键中的数字数据与另一个数值进行比较
- 如何使您的程序重复递增,直到在switch语句中按下另一个键
- 如何在QxORM中定义具有多个主键的表,其中一个主键是与另一个表的"many to one"关系
- 如何将键值对引用从一个映射复制到同一类型的另一个映射
- 如果键已经存在,为什么 stl map 会插入另一个值,而不仅仅是更改它
- 从映射中删除键不包含在另一个向量中的元素
- 将SDL_Surface Blit到另一个SDL_Surfaces上,然后应用颜色键
- 在多映射中,当两个迭代器持有具有映射到不同Value的相同键的值时.我们如何才能在地图上找到它们中的哪一个在另一个之前
- 在c++中使用一个map中的值作为另一个map中的键
- 在c++中如何从另一个完整映射中插入键和值到空映射
- 如何从另一个地图键列表中减去一个列表并获得新的地图(地图A - mab =地图C)
- 使用容器中的第n个元素,但使用另一个键