크리티컬 섹션 개체가 소유하는 스레드에 대한 핸들을 포함
typedef struct _RTL_CRITICAL_SECTION {
PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
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;
OwningThread로 정의 RTL_CRITICAL_SECTION
와
typedef RTL_CRITICAL_SECTION CRITICAL_SECTION;
으로 정의된다. CriticalSection
데이터 구조를 읽으면 소유 스레드의 핸들을 얻을 수 있습니다.
DWORD WINAPI GetThreadId(_In_ HANDLE OwningThread);
은 소유 스레드의 ID를 반환합니다.
그러나 OwningThread의 정의가있는 작은 사고가 있습니다. MSDN은 필드에 실제로 스레드 ID 자체가 있음을보고합니다.
당신은
GetThreadInformation(OwningThread,....);
더 많은 스레드 정보를 얻기 위해 사용할 수 있습니다.
Break Free of Code Deadlocks in Critical Sections Under Windows (MSDN에서 은이어야합니다.) 특히 RTL_CRITICAL_SECTION_DEBUG
구조의 EntryCount/ContentionCount
필드는 여기에 대한 질문에 대한 답을 줄 수 있습니다.
: 여기 WinDBG로 워드 프로세서의 과정에서 중요한 부분을 보는 방법에 대한 정보가 있습니다. 어쩌면이 페이지가 도움이 될까요? http://msdn.microsoft.com/en-us/library/dd554943.aspx – jxh
잘 모르겠 음 - CS를 파괴하고있는 것은 무엇입니까? –
@MartinJames 명확하지 않은 점에 대해 사과드립니다. 내 개체 중 하나의 소멸자는 중요한 섹션을 삭제하는 것입니다 (괜찮습니다). 그러나 다른 곳에서 CS를 얻기 위해 깨어 난 실이 있습니다. 쓰레드가 깨어나서 입력되지 않았기 때문에 CS! cs -s 주소는 CS를 소유 한 쓰레드를 보여주지 않습니다. –