1. 程式人生 > >【作業系統】執行緒間實現同步的方式

【作業系統】執行緒間實現同步的方式

同步與互斥的區別與聯絡

  • 互斥:是指散佈在不同程序(執行緒)之間的若干程式片斷,當某個程序(執行緒)執行其中一個程式片段時,其它程序(執行緒)就不能執行它們之中的任一程式片段,只能等到該程序(執行緒)執行完這個程式片段後才可以執行。

  • 同步:是指散佈在不同程序(執行緒)之間的若干程式片斷,它們的執行必須嚴格按照規定的 某種先後次序來執行,這種先後次序依賴於要完成的特定的任務。

同步是一種更為複雜的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個執行緒之間不可以同時執行,他們會相互排斥,必須等待一個執行緒執行完畢,另一個才能執行,而同步大部分情況下也是不能同時執行,但他是必須要安照某種次序來執行相應的執行緒,而且少數時候同步可以允許多個執行緒同時執行! 

執行緒同步的方式

執行緒間同步的方式主要由以下三種:

  • 互斥量:採用互斥物件機制,只有擁有互斥物件的執行緒才有訪問公共資源的許可權。因為互斥物件只有一個,所以可以保證公共資源不會被多個執行緒同時訪問。

  • 訊號量:它允許同一時刻多個執行緒訪問同一資源,但是需要控制同一時刻訪問此資源的最大執行緒數量。當需要一個計數器來限制可以使用某共享資源的執行緒數目時,可以使用“訊號量”物件。

  • 事件(訊號):通過通知操作的方式來保持多執行緒同步,還可以方便的實現多執行緒優先順序的比較操作。即事件機制允許一個執行緒在處理完一個任務後,主動喚醒另外一個執行緒執行任務。