确定要复制CRITICAL_SECTION?

时间:2010-07-16 22:25:26

标签: c winapi synchronization

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

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

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

2 个答案:

答案 0 :(得分:12)

没有。无法复制CRITICAL_SECTIONMSDN 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;

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