linux 同步和互斥的區別

2021-10-08 10:13:06 字數 722 閱讀 9522

互斥:是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的;

同步:是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。

一、同步與互斥的區別

同步,又稱直接制約關係,是指多個執行緒(或程序)為了合作完成任務,必須嚴格按照規定的 某種先後次序來執行。

例如,執行緒 t2 中的語句 y 要使用執行緒 t1 中的語句 x 的執行結果,所以只有當語句 x 執行完成之後語句 y 才可以執行。我們可以使用訊號量進行同步:

semaphore s=0;

// 初始化訊號量t1(

)t2()

互斥,又稱間接制約關係,是指系統中的某些共享資源,一次只允許乙個執行緒訪問。當乙個執行緒正在訪問該臨界資源時,其它執行緒必須等待。

例如,印表機就是一種臨界資源,而訪問印表機的**片段稱為臨界區,故每次只允許乙個執行緒進入臨界區。—— 我們同樣可以使用訊號量解決互斥問題,只需把臨界區置於 p(s) 和 v(s) 之間,即可實現兩線程對臨界資源的互斥訪問。

semaphore s=1;

// 初始化訊號量t1(

)t2()

linux中線程同步和互斥的區別

相交程序之間的關係主要有兩種,同步與互斥。所謂互斥,是指散步在不同程序之間的若干程式片斷,當某個程序執行其中乙個程式片段時,其它程序就不能執行它 們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。所謂同步,是指散步在不同程序之間的若干程式片斷,它們的執行必須嚴格按照規定的某種先後次...

linux中線程同步和互斥的區別

相交程序之間的關係主要有兩種,同步與互斥。所謂互斥,是指散步在不同程序之間的若干程式片斷,當某個程序執行其中乙個程式片段時,其它程序就不能執行它 們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。所謂同步,是指散步在不同程序之間的若干程式片斷,它們的執行必須嚴格按照規定的 某種先後...

linux中線程同步和互斥的區別

相交程序之間的關係主要有兩種,同步與互斥。所謂互斥,是指散步在不同程序之間的若干程式片斷,當某個程序執行其中乙個程式片段時,其它程序就不能執行它 們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。所謂同步,是指散步在不同程序之間的若干程式片斷,它們的執行必須嚴格按照規定的某種先後次...