可以使用CRITICAL_SECTION变量来实现互斥。
我的问题是:CRITICAL_SECTION是否支持复制?如果我将一个值传递给另一个线程,我是否可以确定相互排除是否有效?
如果答案是“你不能那样做”,我不会感到惊讶,但有一些官方确认会很高兴。我无法在文档中找到任何声明。
答案 0 :(得分:12)
没有。无法复制CRITICAL_SECTION
。 MSDN states this explicitly:
无法移动或复制关键部分对象。
答案 1 :(得分:1)
通过标题的快速搜索显示结构在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;
那就是说,我不知道为什么这些内部计数器存储在用户空间结构中,即如果程序修改了这些内容会发生什么?