我可以在 Win32 CriticalSection 内返回吗?

问题描述 投票:0回答:1

您好,我有一个关于关键部分的 Win32 API 问题。我搜索文档并找不到答案。我的问题是在关键部分可以返回吗?或者一旦进入该部分,您是否必须跌倒并离开该部分?这是一些示例代码...

//option one
bool doSomething() {

    EnterCriticalSection(&section);
    
    if(something)
        return true; 

    LeaveCriticalSection(&section);
}

//option two
bool doSomething() {

    bool flag = false;

    EnterCriticalSection(&section);
    
    if(something)
        flag = true; 

    LeaveCriticalSection(&section);

    return flag;
}

我希望我可以选择选项一并从该部分内部返回,这样可以释放所有锁定。

api winapi
1个回答
0
投票

如果您直接使用API,如您的示例所示,那么您必须显式离开CS,否则您将面临死锁其他想要进入CS的线程的风险。

如果您使用像 C++ 这样支持 OOP 编程的语言,并且希望在超出范围时自动离开 CS,那么您需要一个 RAII 风格的包装器,其构造函数进入 CS,析构函数离开 CS。

© www.soinside.com 2019 - 2024. All rights reserved.