互斥鎖和讀寫鎖

2021-10-03 14:52:55 字數 1102 閱讀 6573

互斥鎖的型別

對資源的訪問是互斥的,即執行緒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,分為讀鎖和寫鎖。處於讀操作時,可以允許多個執行緒同時獲得讀操作。但是同一時刻只能有乙個執行緒可以獲得寫鎖。其它獲取寫鎖失敗的執行緒都會進入睡眠狀態,直...