确定要复制CRITICAL_SECTION?

可以使用CRITICAL_SECTION变量来实现互斥。

我的问题是:CRITICAL_SECTION是否支持复制? 如果我将一个值传递给另一个线程,我是否可以确定相互排除是否有效?

如果答案是“你不能那样做”,我不会感到惊讶,但是得到某种官方确认会很好。 我无法在文档中找到任何声明。

不可以。无法复制CRITICAL_SECTION 。 MSDN明确说明了这一点 :

无法移动或复制关键部分对象。

通过标题快速搜索显示结构是在winnt.h定义的,这个定义似乎清楚地表明复制结构是行不通的。

 typedef struct _RTL_CRITICAL_SECTION { PRTL_CRITICAL_SECTION_DEBUG DebugInfo; // // The following three fields control entering and exiting the critical // section for the resource // LONG LockCount; LONG RecursionCount; HANDLE OwningThread; // from the thread's ClientId->UniqueThread HANDLE LockSemaphore; ULONG_PTR SpinCount; // force size on 64-bit systems when packed } RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION; 

也就是说,我不知道为什么这些内部计数器存储在用户空间结构中,即如果程序修改了这些结果会发生什么?