多執行緒同步問題(1)互斥鎖和條件變數

2021-07-14 22:20:12 字數 812 閱讀 5419

最近一段時間學習了很多關於多執行緒的東西,同時專案中也多是此類東西,因此記錄一下

1.多執行緒的問題在於同步,主要是各個執行緒的時間片分配,不能總是給乙個執行緒cpu時間,讓其他執行緒沒有cpu可用

2.多執行緒同步有很多種方法,目前工作中用到的多是互斥鎖,讀寫鎖,條件變數等。

3.各種方法的解釋:

互斥鎖:互斥鎖的理解很簡單,就是當我用了這把鎖之後,在我把鎖釋放之前,都不能夠給別人用。

int pthread_mutex_lock(pthread_mutex_t *mutex);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

其中mutex既可以動態建立也可以靜態建立。

在加鎖和解鎖之間操作要變更的變數。

讀寫鎖的理解和互斥鎖基本一致,但是讀寫鎖的區別在於:只能操作其中的讀或者寫。

條件變數:條件變數就是用來等待條件訊號成立,然後可以繼續向下執行。相對於互斥鎖更為靈活。

int pthread_cond_wait(pthread_cond_t* cond, pthrad_condattr_t* cord_attr);該函式等待cond訊號。

int pthread_cond_signal(pthread_cond_t* cond);

int pthread_cond_broadcast(pthread_cond_t* cond);

下面兩個函式返回cond訊號,不過singal只是按順序釋放需要cond的函式,而broadcast釋放所有的函式。

當然還有自旋鎖,還在學習中,暫時用到的不到,最近看核心的時候發現裡面有用到。

執行緒同步 互斥鎖 條件變數

在 執行緒同步 互斥鎖 一文中,我們分析了只用互斥鎖同步執行緒的弊端 cpu的效率和時效性不可兼得。下面,我們通過使用條件變數,在保證cpu效率的前提下,提高程式的時效性。只用互斥鎖同步執行緒,其cpu佔用率之所以高,是因為執行緒需要輪詢,即需要不停的檢查條件是否滿足。我們使用條件變數,當條件不滿足...

執行緒同步1 互斥鎖

和多程序相比,多執行緒的最大特點就是資源的共享。然而共享卻涉及到乙個同步的問題,這是多執行緒程式設計的難點。linux系統提供了多種方式處理執行緒間的同步問題,主要有互斥鎖 條件變數和非同步訊號。本文先講互斥鎖。互斥鎖通過鎖機制來實現執行緒間的同步。在同乙個時刻,只允許乙個執行緒執行乙個關鍵部分的 ...

iOS 多執行緒 鎖 互斥 同步

在ios中有幾種方法來解決多執行緒訪問同乙個記憶體位址的互斥同步問題 方法一,synchronized id anobject 最簡單的方法 會自動對引數物件加鎖,保證臨界區內的 執行緒安全 cpp view plain copy print?synchronized self 方法二,nslock...