您好,我有一个关于关键部分的 Win32 API 问题。我搜索文档并找不到答案。我的问题是在关键部分可以返回吗?或者一旦进入该部分,您是否必须跌倒并离开该部分?这是一些示例代码...
//option one
bool doSomething() {
EnterCriticalSection(§ion);
if(something)
return true;
LeaveCriticalSection(§ion);
}
//option two
bool doSomething() {
bool flag = false;
EnterCriticalSection(§ion);
if(something)
flag = true;
LeaveCriticalSection(§ion);
return flag;
}
我希望我可以选择选项一并从该部分内部返回,这样可以释放所有锁定。
如果您直接使用API,如您的示例所示,那么您必须显式离开CS,否则您将面临死锁其他想要进入CS的线程的风险。
如果您使用像 C++ 这样支持 OOP 编程的语言,并且希望在超出范围时自动离开 CS,那么您需要一个 RAII 风格的包装器,其构造函数进入 CS,析构函数离开 CS。