進程線程同步相關

來源:互聯網
上載者:User

1.Critical_section

 

相關操作:

InitializeCriticalSection
EnterCriticalSection
LeaveCriticalSection
DeleteCriticalSection
TryEnterCriticalSection  //如果資源被佔用會返回false,而不是進行睡眠等待。

InitializeCriticalSectionAndSpinCount(a, b)//b在單一處理器中將會被忽略
SetCriticalSectionSpinCount(a, b) // 

 

struct RTL_CRITICAL_SECTION
{
    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
    LONG LockCount;
    LONG RecursionCount;
    HANDLE OwningThread;
    HANDLE LockSemaphore;
    ULONG_PTR SpinCount;
};
struct RTL_CRITICAL_SECTION
{
    PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
    LONG LockCount;
    LONG RecursionCount;
    HANDLE OwningThread;
    HANDLE LockSemaphore;
    ULONG_PTR SpinCount;
};

DebugInfo 此欄位包含一個指標,指向系統分配的伴隨結構,該結構的類型為
RTL_CRITICAL_SECTION_DEBUG
LockCount 這是臨界區中最重要的一個欄位。它被初始化為數值 -1,這裡LockCount為1意思為除了一個線程擁有它外,另外還有一個線程在等待它,它是由EnterCriticalSection增加,LeaveCriticalSection來減小的。((“此數值等於或大於 0 時,表示此臨界區被佔用。當其不等於 -1 時,OwningThread 欄位包含了擁有此臨界區的線程 ID。此欄位與 (RecursionCount -1) 數值之間的差值表示有多少個其他線程在等待獲得該臨界區”))是網上的資料,本人測試好像並不是這樣,如果有知道兩者之間的關係的,留言告知一下。

RecursionCount 此欄位為本線程遞迴獲得該臨界區的次數。初始為0,如果該數值為零,下一個嘗試擷取該臨界區的線程將會成功。

OwningThread 此欄位包含當前佔用此臨界區的線程的線程標識符。此線程 ID 與 GetCurrentThreadId 之類的 API 所返回的 ID 相同,為0時臨界區為有訊號狀態。
LockSemaphore 它實際上是一個自複位事件,而不是一個訊號。它是一個核心物件控點,用於通知作業系統:該臨界區現在空閑。作業系統在一個線程第一次嘗試獲得該臨界區,但被另一個已經擁有該臨界區的線程所阻止時,自動建立這樣一個控制代碼。應當調用 DeleteCriticalSection(它將發出一個調用該事件的 CloseHandle 調用,並在必要時釋放該調試結構),否則將會發生資源泄漏。
SpinCount 僅用於多處理器系統。在多處理器系統中,如果該臨界區不可用,調用線程將在對與該臨界區相關的訊號執行等待操作之前,旋轉 dwSpinCount 次。如果該臨界區在旋轉操作期間變為可用,該調用線程就避免了等待操作。旋轉計數可以在多處理器電腦上提供更佳效能,其原因在於在一個迴圈中旋轉通常要快於進入核心模式等待狀態。此欄位預設值為零,但可以用InitializeCriticalSectionAndSpinCount API 將其設定為一個不同值。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.