自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

聊聊Golang的讀寫鎖

開發(fā) 前端
如果需要使用公平鎖,可以考慮使用sync.Mutex,它保證等待時(shí)間最長(zhǎng)的線程能夠最先獲取鎖。但是需要注意的是,公平鎖會(huì)導(dǎo)致額外的開銷,因?yàn)樗枰S護(hù)等待隊(duì)列,進(jìn)行線程切換等操作。

Go語(yǔ)言中的RWMutex是一種讀寫鎖,它采用了讀寫分離的思想,可以同時(shí)支持多個(gè)讀操作,但只能同時(shí)有一個(gè)寫操作。它的原理是這樣的:

  1. RWMutex內(nèi)部維護(hù)兩個(gè)計(jì)數(shù)器,一個(gè)是讀計(jì)數(shù)器,一個(gè)是寫計(jì)數(shù)器。
  2. 在讀操作執(zhí)行時(shí),讀計(jì)數(shù)器會(huì)加1,如果此時(shí)寫計(jì)數(shù)器的值不為0,則說(shuō)明有寫操作正在進(jìn)行,那么這個(gè)讀操作就需要阻塞等待。
  3. 在寫操作執(zhí)行時(shí),會(huì)先判斷讀計(jì)數(shù)器的值是否為0,如果不為0,則說(shuō)明有讀操作正在進(jìn)行,那么這個(gè)寫操作就需要阻塞等待。寫操作執(zhí)行時(shí),會(huì)把寫計(jì)數(shù)器加1,這樣其他讀寫操作就無(wú)法繼續(xù)執(zhí)行了。
  4. 當(dāng)讀操作執(zhí)行完畢時(shí),讀計(jì)數(shù)器會(huì)減1,如果此時(shí)讀計(jì)數(shù)器的值為0,那么說(shuō)明沒(méi)有其他讀操作在進(jìn)行了,可以允許寫操作了。
  5. 當(dāng)寫操作執(zhí)行完畢時(shí),寫計(jì)數(shù)器會(huì)減1,如果此時(shí)寫計(jì)數(shù)器的值為0,那么說(shuō)明沒(méi)有其他讀寫操作在進(jìn)行了,此時(shí)其他讀寫操作就可以繼續(xù)執(zhí)行了。

當(dāng)有大量讀時(shí),寫操作不會(huì)餓死,這是因?yàn)樽x寫鎖支持優(yōu)先處理寫操作的。具體來(lái)說(shuō),當(dāng)一個(gè)寫操作請(qǐng)求鎖時(shí),如果此時(shí)已經(jīng)有其他讀或?qū)懖僮鞒钟墟i,那么該寫操作會(huì)被阻塞,等待其他操作釋放鎖。但是,一旦沒(méi)有任何讀或?qū)懖僮鞒钟墟i,那么該寫操作會(huì)立即獲取到鎖,并且優(yōu)先執(zhí)行,即使此時(shí)已經(jīng)有很多讀操作在等待。

也就是說(shuō)讀寫鎖并不是公平鎖。因?yàn)椴⒉槐WC等待時(shí)間最長(zhǎng)的線程能夠最先獲取鎖。

如果需要使用公平鎖,可以考慮使用sync.Mutex,它保證等待時(shí)間最長(zhǎng)的線程能夠最先獲取鎖。但是需要注意的是,公平鎖會(huì)導(dǎo)致額外的開銷,因?yàn)樗枰S護(hù)等待隊(duì)列,進(jìn)行線程切換等操作。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-06-02 08:29:24

https://wwMutex

2023-11-06 09:21:39

表達(dá)式類型Cause

2024-01-29 01:08:01

悲觀鎖遞歸鎖讀寫鎖

2024-05-17 09:33:22

樂(lè)觀鎖CASversion

2022-10-24 00:03:26

GolangNew函數(shù)

2024-10-06 12:56:36

Golang策略設(shè)計(jì)模式

2023-01-26 00:59:39

B-Treegolang度量衡

2024-05-15 09:41:22

樂(lè)觀鎖編程

2022-08-05 08:27:05

分布式系統(tǒng)線程并發(fā)

2020-02-24 21:43:36

avaJVM 級(jí)鎖線程安全

2024-10-10 09:40:29

2019-11-28 16:00:06

重入鎖讀寫鎖樂(lè)觀鎖

2023-01-04 13:43:24

讀寫鎖AQS共享模式

2024-02-20 21:34:16

循環(huán)GolangGo

2022-04-08 08:27:08

分布式鎖系統(tǒng)

2022-02-08 08:12:51

無(wú)鎖編程設(shè)計(jì)

2023-01-06 09:40:20

項(xiàng)目性能

2024-06-11 00:01:00

并發(fā)validate場(chǎng)景

2021-07-06 08:37:29

Redisson分布式

2020-09-16 07:56:28

多線程讀寫鎖悲觀鎖
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)