CRITICAL_SECTION 和 CCriticalSection 之间的关系是什么。CCriticalSection 是 CRITICAL_SECTION 的包装吗?
顺便提一句:
我认为下面的代码是没有意义的,因为 cs 不是全局的,它每次在 lock() 之前都是初始的,所以它不能锁定 XXX ,是吗?
int func
{
CCriticalSection cs;
cs.Lock();
XXX
cs.Unlock();
}
非常感谢!
CRITICAL_SECTION 和 CCriticalSection 之间的关系是什么。CCriticalSection 是 CRITICAL_SECTION 的包装吗?
顺便提一句:
我认为下面的代码是没有意义的,因为 cs 不是全局的,它每次在 lock() 之前都是初始的,所以它不能锁定 XXX ,是吗?
int func
{
CCriticalSection cs;
cs.Lock();
XXX
cs.Unlock();
}
非常感谢!
是的,MFC CCriticalSection部分只是 Win32 CRITICAL_SECTION 的包装。
这几乎适用于所有 MFC,它是围绕标准 Win32 功能的大量包装类。
至于您的代码示例,是的,在该上下文中使用关键部分是没有意义的。临界区的作用类似于命名互斥体,它确保资源一次只能由单个线程访问。正确使用临界区将作为一个可由多个线程访问的对象,然后在使用一次不能由多个线程使用的资源时:
MyGlobalCS.Lock();
// Do important work on resource
MyGlobalCS.Unlock();
另请注意,如果很难将关键部分放入共享位置,则可以改用命名互斥锁。