在堆栈上有一个对象,而不是在函数的整个生命周期内

Have an object on stack not for the entire lifetime of the function

本文关键字:生命 周期 函数 堆栈 一个对象      更新时间:2023-10-16

我有一个函数foo(),它获取一个critical section进行一些处理并释放critical section。现在有多个控制流,所以为了避免记住释放锁,我想把它包装在一个类中,以便析构函数自动释放锁。

class Lock
{
public:
    LPCRITICAL_SECTION m_a;
    Lock(CRITICAL_SECTION *a):m_a(a){EnterCriticalSection(a);}
    ~Lock(){LeaveCriticalSection(m_a);}
};

现在的问题是我有控制流,我想在其中获取锁,执行某些操作然后释放它,然后继续其他处理。所以我不想等到功能结束时才释放锁,然后破坏开始。有没有办法实现这一目标。

使用本地块:

void myFunction() {
    // do stuff
    {
        Lock l(&critsec);
        // do stuff needing lock
    }
    // do more stuff
}