代码之家  ›  专栏  ›  技术社区  ›  redtuna

可以复制关键部分吗?

  •  8
  • redtuna  · 技术社区  · 14 年前

    可以使用一个关键的节变量来获得互斥。

    我的问题是:关键部分是否支持复制?如果我将一个值传递给另一个线程,我能确定互斥会起作用吗?

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

    2 回复  |  直到 14 年前
        1
  •  12
  •   James McNellis    14 年前

    A号 CRITICAL_SECTION 无法复制。 MSDN states this explicitly :

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

        2
  •  1
  •   casablanca    14 年前

    通过对标题的快速搜索,可以发现该结构是在 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;
    

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