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