Delphi中最常用的三種線程同步技術

來源:互聯網
上載者:User
        線程是進程內一個相對獨立的、可調度的執行單元。一個應用可以有一個主線程,一個主線程可以有多個子線程,子線程還可以有自己的子線程,這樣就構成了多線程應用了。由於多個線程往往會同時訪問同一塊記憶體地區,頻繁的訪問這塊地區,將會增加產生線程衝突的機率。一旦產生了衝突,將會造成不可預料的結果(該公用地區的值是不可預料的)可見處理線程同步的必要性。

        最近在做資料模組緩衝池中就需要用到線程同步的技術,也就順便用簡約的篇幅總結了Delphi中最常用的三種線程同步技術。

1.Critical Sections(臨界區)
  代碼中如果有不能由兩個或兩個以上線程同時執行的部分,可以用臨界區來使這部分的代碼執行序列化。
  它只能在一個獨立的進程或一個獨立的應用程式中使用。

使用方法如下:

//申明
var
  oCSect: TCriticalSection; // 臨界區對象,保證多線程時存取資料模組的安全

//建立
oCSect := TCriticalSection.Create;

//進入臨界區
oCSect.Enter;
try
  dosomething...//保護的代碼
finally
  //離開臨界區
  oCSect.Leave;
end;

//釋放臨界區
oCSect.Free;

2.Mutex(互斥對象)
  是用於序列化訪問資源的全域對象。我們首先設定互斥對象,然後訪問資源,最後釋放互斥對象。在設定互斥對象時,如果另一個線程(或進程)試圖設定相同的互斥對象,該線程將會停下來,直到前一個線程(或進程)釋放該互斥對象為止。注意它可以由不同應用程式共用。

使用方法如下:

//申明
hMutex: HWND;

//建立
hMutex:=CreateMutex(nil,false,nil);

try
  WaitForSingleObject(hMutex,INFINITE);
  dosomething...//保護的代碼
finally
  ReleaseMutex(hMutex);
end;

//銷毀
CloseHandle(hMutex)

3.Semaphore(訊號量)
  它與互斥對象相似,但它可以計數。例如可以允許一個給定資源同時同時被三個線程訪問。其實Mutex就是最大計數為一的  Semaphore。

使用方法如下:

//申明
hSemaphore: THandle; // 並發許可數控制代碼

//建立號誌 建立對象時指定最大可同時訪問的線程數
//CreateSemaphore(lpSemaphoreAttributes As SECURITY_ATTRIBUTES,
// ByVal lInitialCount As Long, ByVal lMaximumCount As Long, ByVal lpName As String);
hSemaphore:= CreateSemaphore(nil,lInitialCount,lMaximumCount,lpName)
try
  WaitForSingleObject(hSemaphore,INFINITE);
  dosomething...//保護的代碼
finally
  ReleaseSemaphore(hSemaphore, lReleaseCount, lpPreviousCount)
end;

//銷毀
CloseHandle(hSemaphore)

當開發多線程應用時,並且多個線程同時訪問一個共用資源或資料時,你是不是也該考慮線程同步的問題了?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.