互斥鎖的型別
對資源的訪問是互斥的,即執行緒a對資源加鎖後,在a解鎖前,其他執行緒不能訪問這個加鎖的資源。
互斥鎖的特點
多個執行緒訪問資源的時候是序列的
互斥鎖的使用步驟
建立乙個互斥鎖:pthread_mutex_t mutex
初始化這把鎖:pthread_mutex_init(&mutex, null);
尋找共享資源:
操作共享**之前加鎖
操作完之後解鎖
互斥鎖的相關函式
初始化互斥鎖
pthread_mutex_init(&mutex, null)
銷毀互斥鎖
pthread_mutex_destroy(&mutex)
加鎖 pthread_mutex_lock(&mutex);
如果當前要訪問的資源沒有被上鎖,則這個執行緒會鎖上這個資源
如果當前資源已經被鎖上了, 則這個執行緒會被阻塞,等到鎖被開啟之後,這個執行緒解除阻塞
讀寫鎖的型別
讀鎖:對記憶體進行讀操作
寫鎖:對記憶體進行寫操作
讀寫鎖的特點
執行緒a加讀鎖成功後,又來了三個執行緒,做讀操作,可以加鎖成功-----------------讀時共享執行緒a加寫鎖成功後,又來了三個執行緒,做寫操作,這三個執行緒阻塞--------------寫時獨佔執行緒a加讀鎖成功後,又來了b執行緒加讀鎖和c執行緒加寫鎖,bc執行緒都阻塞,a讀完解鎖之後,b對資源加寫鎖,c仍然阻塞----------------------讀寫不能同時進行且寫的優先順序更高
讀寫鎖的相關函式
定義乙個讀寫鎖pthread_rwlock_t rwlock
初始化讀寫鎖pthread_rwlock_init(&rwlock, null)
銷毀讀寫鎖pthread_rwlock_destroy(&rwlock)
加讀鎖pthread_rwlock_rdlock(&rwlock);加寫鎖pthread_rwlock_wrlock(&rwlock)
解鎖pthread_rwlock_unlock(&lock)
Go 互斥鎖和讀寫互斥鎖的實現
目錄 先來看這樣一段 所存在的問題 var wg sync.waitgroup var x int64 func main func f wg.done 這裡為什麼輸出是 12135 不同的機器結果不一樣 而不是20000。因為 x 的賦值,總共分為三個步驟 取出x的值 計算x的結果 給x賦值。那麼...
互斥鎖 遞迴鎖 讀寫鎖和自旋鎖區別
共享資源的使用是互斥的,即乙個執行緒獲得資源的使用權後就會將改資源加鎖,使用完後會將其解鎖,所以在使用過程中有其它執行緒想要獲取該資源的鎖,那麼它就會被阻塞陷入睡眠狀態,直到該資源被解鎖才會別喚醒,如果被阻塞的資源不止乙個,那麼它們都會被喚醒,但是獲得資源使用權的是第乙個被喚醒的執行緒,其它執行緒又...
互斥鎖機制,互斥鎖與讀寫鎖區別
互斥鎖 mutex,用於保證在任何時刻,都只能有乙個執行緒訪問該物件。當獲取鎖操作失敗時,執行緒會進入睡眠,等待鎖釋放時被喚醒 讀寫鎖 rwlock,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直...