執行緒同步與互斥 實現互斥鎖

2021-08-02 18:01:36 字數 1486 閱讀 7166

今天我們來分享一下,執行緒同步與互斥——互斥鎖的實現。

多個執行緒同時訪問共享資料時可能會產生衝突,造成程式執行結果不是我們所預期的結果。

不產生衝突的多執行緒訪問情況,**和截圖如下:

產生衝突的多執行緒訪問情況,**和截圖如下:

注:每執行一次,結果都可能會不同。

由於多執行緒訪問共享資料時可能會產生衝突,不能保證執行緒之間的同步與互斥。所以為了保證多執行緒訪問共享資料時能夠實現同步與互斥,所以我們可以使用執行緒的互斥鎖。

當執行緒進入臨界區時,該執行緒加鎖,以此來確保此時占有臨界資源,以此來實現互斥。當執行緒完成在臨界區的一系列操作後,該執行緒釋放鎖,以此來確保其他執行緒可以占有臨界資源,以此來實現同步。

互斥鎖實現執行緒同步互斥的**截圖和執行結果如下:

互斥鎖的源**如下:

mypthread.c

#include#include//pthread_mutex_t lockp = pthread_mutex_initializer;//可用全域性鎖

int code = 0;

void* thread_fun(void* arg)

return (void*)1;

} int main()

if(pthread_create(&tid2, null, thread_fun, &lockp)<0)

pthread_join(tid1, null);

pthread_join(tid2, null);

pthread_mutex_destroy(&lockp);

return 0;

}

makefile  

mythread:mythread.c

gcc -o $@ $^ -lpthread

.phony:clean

clean:

rm -f mythread

分享如上,願大家天天有進步!

執行緒同步與互斥 互斥鎖

在多工作業系統中,同時執行的多個任務可能都需要使用同一種資源。這個過程有點類似於,公司部門裡,我在使用著印表機列印東西的同時 還沒有列印完 別人剛好也在此刻使用印表機列印東西,如果不做任何處理的話,列印出來的東西肯定是錯亂的。下面我們用程式模擬一下這個過程,執行緒一需要列印 hello 執行緒二需要...

執行緒同步與互斥 互斥鎖

在多工作業系統中,同時執行的多個任務可能都需要使用同一種資源。這個過程有點類似於,公司部門裡,我在使用著印表機列印東西的同時 還沒有列印完 別人剛好也在此刻使用印表機列印東西,如果不做任何處理的話,列印出來的東西肯定是錯亂的。下面我們用程式模擬一下這個過程,執行緒一需要列印 hello 執行緒二需要...

執行緒同步與互斥 互斥鎖(mutex)

在多執行緒訪問共享資料的時候可能會發生衝突,例如 衝突的例子 include include include includeint common data 0 公共資料 void increase data void vptr return null int main void err pthrea...