Csinglelock有什么用?

时间:2015-02-03 07:23:21

标签: c++ multithreading mfc

在MSDN中提到,要锁定和解锁CCriticalSection对象,我们应该使用CSingleLock。但CCriticalSection :: lock()和CCriticalSection :: unlock()做同样的事情,不是吗?那两种方法有什么区别?

1 个答案:

答案 0 :(得分:1)

使用包装器将确保(几乎)无论您从锁定锁定的位置做什么,当您离开该功能时,它将解锁。

考虑:

void func()
{
    lock();
    ... plenty of lines ... 
    // x = 8128 happens on a Wednesday, in a month without 
    // r in the name, only if the day is divisible by 7 and 3. 
    if (x == 8128)
       return;
    ... more lines of code ... 
    unlock();
}

因此,一次又一次,您的应用程序忘记解锁。

如果您遇到异常,请使用goto等,同样适用。

如果使用包装器,则可以保证在包装器的作用域结束时将调用析构函数。这对于std::stringstd::vector和锁定一样有用。

当然,如果您使用例如longjmp跳出上下文,它将无济于事。但是你不应该使用longjmp