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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux操作系统之线程同步及互斥量

發(fā)布時間:2023/11/30 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux操作系统之线程同步及互斥量 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

(1)線程同步

? ? ? ? ? ?1)線程同步:指一個線程發(fā)出某一個功能運行時,在運行還沒有結(jié)束的時候,該調(diào)用不返回。同時其它線程為保證數(shù)據(jù)的一致性,不能調(diào)用該功能。

? ? ? ? ? ?2)多個控制流共同操作一個共享資源的時候,都需要同步。

? ? ? ? ? ?3)數(shù)據(jù)混亂的原因:1》資源共享? 2》調(diào)度隨機? ?3》線程間缺乏必要的同步機制。

? ? ? ? ? ? ? ? ? ? ? 前兩點無法避免,只能從第三點開始優(yōu)化。

(2)互斥量mutex

? ? ? ? ?1)linux中提供一把互斥鎖mutex(互斥量),每個線程都是提前對資源操作前都嘗試先加鎖,成功加鎖才能操作,操作結(jié)束后解鎖。

? ? ? ? ?2)同一個時刻,只能有一個線程持有該鎖。

? ? ? ? ?3)當(dāng)線程A多某個全局變量加鎖訪問時,B在訪問時嘗試加鎖,失敗后,B阻塞。C線程不加鎖訪問全局變量,可以訪問,但是數(shù)據(jù)混亂,因此互斥鎖又被成為“建議鎖”(協(xié)同鎖),沒有強制限定。

(3)互斥量及相關(guān)函數(shù):

? ? ? ? ? ? ? ? pthread_mutex_t類型,一個結(jié)構(gòu)體,使用時可看做整數(shù)。函數(shù)成功返回0,失敗返回錯誤號。

? ? ? ? ? ? ? 1)pthread_mutex_intit:初始化一個互斥鎖(互斥量)? ? -->初值可看作1

? ? ? ? ? ? ? ? ? ? ? ?int pthread_mutex_init(pthread_mutex_t*restrict mutex,const pthread_mutexattr_t*restrict attr);

? ? ? ? ? ? ? ? ? ? 參數(shù)1;傳出參數(shù),待初始化的互斥量。

? ? ? ? ? ? ? ? ? ? 參數(shù)2:看成互斥量屬性,出入?yún)?shù),通常傳NULL,表示默認屬性(線程間共享)

? ? ? ? ? ? ? ? ? ? 靜態(tài)初始化: 使用宏初始化? pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;

? ? ? ? ? ? ? ? ? ? 動態(tài)初始化:使用函數(shù)初始化。

? ? ? ? ? ? ? 2)pthread_mutex_destory:銷毀一個互斥鎖

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int? pthread_nutex_destory(pthread_mutex_t *mutex);

? ? ? ? ? ? ?3)pthread_mutex_lock:加鎖

? ? ? ? ? ? ? ? ? ? ? ? ? ?嘗試加鎖,加鎖不成功,則阻塞。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int? pthread_nutex_lock(pthread_mutex_t *mutex);

? ? ? ? ? ? ?4)pthread_mutex_unlock:解鎖

? ? ? ? ? ? ? ? ? ? ? ? ?喚醒阻塞所有線程。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???int? pthread_nutex_unlock(pthread_mutex_t *mutex);

? ? ? ? ? ? ?5)pthread_mutex_trylock:嘗試加鎖

? ? ? ? ? ? ? ? ? ? ? ? ?加鎖失敗后返回錯誤號,不阻塞。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??int? pthread_nutex_trylock(pthread_mutex_t *mutex);

(4)加鎖解鎖測試:不同線程實現(xiàn)不同的打印任務(wù)

? ? ? ?

? ? ? ? ?

? ? ? ? ? ?結(jié)論:在訪問共享資源時加鎖,訪問結(jié)束后解鎖,鎖的“粒度”越小越好

(5)死鎖

? ? ? ? ? ? ?1)同一個線程試圖多同一個互斥量加鎖兩次。

? ? ? ? ? ? ?2)線程1擁有A鎖請求B鎖;線程2擁有B鎖請求A鎖。

? ? ? ? ?

總結(jié)

以上是生活随笔為你收集整理的linux操作系统之线程同步及互斥量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。