日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

线程互斥和同步-- 互斥锁

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程互斥和同步-- 互斥锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一. 線程分離 我們一般創建的線程是可結合的,這個時候如果我們調用pthread_jion()去等待的話,這種等待的方式是阻塞式等待,如果主線程一直等待,主線程就無法做其他的事情了,所以應該使用線程分離,讓子線程由操作系統回收,主線程就不管了。 不管線程是否分離,它始終是在進程的內部執行的。 使用的函數接口是pthread_detach(pthread_t pid) 如果分離自己參數為pthread_self(),如果是主線程分離子線程,參數為pthread_id 二. 線程互斥 因為我們的多個線程是共享一個資源的,這個資源就是臨界資源,多個線程對資源的訪問就需要使用線程的同步和互斥 互斥,對資源的訪問時串行的,原子的。即是,每次只能有一個線程訪問臨界 資源三.線程同步 如果我們的某一個線程的優先級特別高,那么它可能會一直占據這這臨界資源,這個時候,其他的線程就無法使用這個臨界資源,雖然我們實現了線程的互斥,但是只有一個線程 使用它,這也是不符合我們的實際需求的,所以這個時候需要使用線程的同步。 線程同步的意思就是說,每次使用完一個臨界資源之后,都需要排隊,打個形象的比喻就是,如果我們一個人進入一個單獨自習室自習之后,出來的時候,必須排在其他的排在門口的人后面,不能直接出來又進去,這樣的話,他就是一直占據著臨界資源了。 四. 互斥鎖 設置一個互斥鎖,這個時候一次,創建一個全局的互斥鎖。 在線程函數里面,每次一個線程 訪問的臨界資源的時候,首先要做的是就是獲取這個鎖,只有拿到鎖之后才能對臨界資源進行操作,然后每次在退出臨界資源之前,要解鎖,這樣其他的線程進入的時候才不會永遠拿不到鎖。 整個函數結束前,要銷毀鎖。
對于互斥鎖的一個深層次的理解 1. 互斥鎖本身就是一個臨界資源,所以對互斥鎖的操作本身就是原子的。 2. 每次在線程 函數的內部,每次需要申請鎖資源,如果申請失敗,當前的線程就會被掛起,掛起就是該線程的PCB在等待隊列里面。
死鎖產生的情景 1. 多線程可能有多把鎖,這個時候,如果其中的某些線程 都想要訪問彼此的鎖,這個時候可能 都拿不到,然后就產生了死鎖。 2. 一個進程一把鎖,可能由于代碼錯誤,當它申請鎖之后,已經 拿到了這把鎖,然后他又去申請同樣 的,這個時候就出現了死鎖。
下面看代碼的實現。
#include<stdio.h>
#include<pthread.h>
int count = 0; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;   //創建一把鎖,使用宏進行初始化void* pccount(void* arg)
{int i = 0;int temp = 0;while(i<50000000){pthread_mutex_lock(&lock);   //加鎖,如果鎖資源是空,就拿到鎖,如果鎖資源不是空,就掛起等待//	temp=count;count=count+1;//printf("%d",temp);i++;pthread_mutex_unlock(&lock);   //操作完臨界資源之后,要解鎖,這樣其他的線程才能夠獲取鎖資源}
//	printf("%d\n",count);pthread_exit((void*)123);
}int main()
{pthread_t pid1;pthread_t pid2;int i = pthread_create(&pid1,NULL,pccount,NULL);int m = pthread_create(&pid2,NULL,pccount,NULL);void* join1;void* join2;pthread_join(pid1,&join1);pthread_join(pid2,&join2);  //這里必須要有線程等待,不然沒有打印結果pthread_mutex_destroy(&lock);   //銷毀鎖資源printf("%d\n",count);return 0;}



總結

以上是生活随笔為你收集整理的线程互斥和同步-- 互斥锁的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。