这段代码之间的差异是什么:
::EnterCriticalSection( &m_CriticalSection );
//...
::LeaveCriticalSection( &m_CriticalSection );
Run Code Online (Sandbox Code Playgroud)
和代码:
static CCriticalSection cs;
cs.Lock();
//...
cs.UnLock();
Run Code Online (Sandbox Code Playgroud)
如果你这样使用它,没有区别.该课程的主要好处是如果您使用它如下:
static CCriticalSection cs;
{
CSingleLock lock(cs, true);
// do your work here
} // unlocked automatically
Run Code Online (Sandbox Code Playgroud)
当退出范围时,即使抛出异常或使用早期返回,临界区也将被解锁.该技术被称为RAII(资源获取是初始化)并且是众所周知的.
MFC同步类的设计不是很好.我建议使用boost.thread或者新C++标准中提供的那些,如果你可以得到它们.