av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

聊聊Golang的讀寫鎖

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

為永春等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及永春網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站建設(shè)、永春網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

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

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

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

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


文章標(biāo)題:聊聊Golang的讀寫鎖
路徑分享:http://uogjgqi.cn/article/cdjgdoo.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流