gpt4 book ai didi

c++ - 包含另一个关键部分的关键部分?

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:14 25 4
gpt4 key购买 nike

是否允许像下面这样嵌套临界区?:

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

关于c++ - 包含另一个关键部分的关键部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21197572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com