堆栈上的对象不是函数的整个生命周期

时间:2018-01-18 03:37:32

标签: c++ winapi raii

我有一个函数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);}
};

现在的问题是我有控制流,我想获取锁,做一些事情,然后释放它,然后继续其他处理。所以我不想等待释放锁,直到功能结束时破坏会开始。有办法实现这一目标。

1 个答案:

答案 0 :(得分:5)

使用本地区块:

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