1

CRITICAL_SECTION 和 CCriticalSection 之间的关系是什么。CCriticalSection 是 CRITICAL_SECTION 的包装吗?

顺便提一句:

我认为下面的代码是没有意义的,因为 cs 不是全局的,它每次在 lock() 之前都是初始的,所以它不能锁定 XXX ,是吗?

int func
{
CCriticalSection cs;
cs.Lock();
XXX
cs.Unlock();
}

非常感谢!

4

1 回答 1

2

是的,MFC CCriticalSection部分只是 Win32 CRITICAL_SECTION 的包装。

这几乎适用于所有 MFC,它是围绕标准 Win32 功能的大量包装类。

至于您的代码示例,是的,在该上下文中使用关键部分是没有意义的。临界区的作用类似于命名互斥体,它确保资源一次只能由单个线程访问。正确使用临界区将作为一个可由多个线程访问的对象,然后在使用一次不能由多个线程使用的资源时:

MyGlobalCS.Lock();

// Do important work on resource

MyGlobalCS.Unlock();

另请注意,如果很难将关键部分放入共享位置,则可以改用命名互斥锁

于 2009-08-27T02:24:20.173 回答