今天我們來分享一下,執行緒同步與互斥——互斥鎖的實現。
多個執行緒同時訪問共享資料時可能會產生衝突,造成程式執行結果不是我們所預期的結果。
不產生衝突的多執行緒訪問情況,**和截圖如下:
產生衝突的多執行緒訪問情況,**和截圖如下:
注:每執行一次,結果都可能會不同。
由於多執行緒訪問共享資料時可能會產生衝突,不能保證執行緒之間的同步與互斥。所以為了保證多執行緒訪問共享資料時能夠實現同步與互斥,所以我們可以使用執行緒的互斥鎖。
當執行緒進入臨界區時,該執行緒加鎖,以此來確保此時占有臨界資源,以此來實現互斥。當執行緒完成在臨界區的一系列操作後,該執行緒釋放鎖,以此來確保其他執行緒可以占有臨界資源,以此來實現同步。
互斥鎖實現執行緒同步互斥的**截圖和執行結果如下:
互斥鎖的源**如下:
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...