GO互斥鎖馒过、讀寫鎖

讀寫鎖:
讀時(shí)共享,寫時(shí)獨(dú)占酗钞。寫鎖優(yōu)先級(jí)比讀鎖優(yōu)先級(jí)高

package main
import (
    "fmt"
    "sync"
    "time"
)
var mutex sync.Mutex //新建一個(gè)互斥鎖沉桌,默認(rèn)狀態(tài)為0,未加鎖
func printer1(str string){
    mutex.Lock() //訪問共享數(shù)據(jù)之前算吩,加鎖
    for _,ch := range str {
        fmt.Printf("%c",ch)
        time.Sleep(time.Millisecond*300)
    }
    mutex.Unlock()//訪問結(jié)束,解鎖
}
func person11 () {
    printer1("Hello")
}
func person22 () {
    printer1("World")
}
func main() {
    go person11()
    go person22()

    for {
        ;
    }
}

通過mutex實(shí)現(xiàn)讀時(shí)共享佃扼,寫時(shí)獨(dú)占
代碼示例:

package main
import (
    "fmt"
    "math/rand"
    "sync"
    "time"
)
var index int
var rwMutxt1 sync.RWMutex
func readRand1(num int)  {
    for {
        rwMutxt1.RLock()
        num =  index
        fmt.Printf("########thread%d讀偎巢,讀出%d\n",num,index)
        rwMutxt1.RUnlock()
    }
}
func writeRand1(num int)  {
    for {
        randNum := rand.Intn(1000)
        rwMutxt1.Lock()
        index = randNum
        fmt.Printf("thread%d寫,寫入%d\n",num,randNum)
        time.Sleep(time.Microsecond*300)
        rwMutxt1.Unlock()
    }
}

func main()  {
    rand.Seed(time.Now().UnixNano())
    for i :=0; i < 2; i++ {
        go writeRand1(i)

    }
    for i :=0; i < 2; i++ {
        go readRand1(i)
    }
    //<- quit
    for {
        ;
    }
}

打印結(jié)果:

thread0寫兼耀,寫入742
########thread742讀压昼,讀出742
########thread742讀,讀出742
thread1寫瘤运,寫入316
########thread316讀窍霞,讀出316
########thread316讀,讀出316
thread0寫拯坟,寫入729
########thread729讀但金,讀出729
########thread729讀,讀出729

通過channel實(shí)現(xiàn)不了讀時(shí)共享郁季,寫時(shí)獨(dú)占
代碼示例:

package main

import (
    "fmt"
    "math/rand"
    "time"
)
var quit = make(chan bool)

func readRand(in <- chan int,num int)  {
    for {
        rrand := <- in
        fmt.Printf("########thread%d讀冷溃,讀出%d\n",num,rrand)
    }
}
func writeRand(out chan <- int,num int)  {
    for {
        randNum := rand.Intn(1000)
        out <- randNum
        fmt.Printf("thread%d寫钱磅,寫入%d\n",num,randNum)
        time.Sleep(time.Microsecond*300)
    }    
}

func main()  {
    ch := make(chan int)
    rand.Seed(time.Now().UnixNano())
    for i :=0; i < 5; i++ {
        go writeRand(ch,i)
    }
    for i :=0; i < 5; i++ {
        go readRand(ch,i)
    }
    //<- quit
    for {
        ;
    }
}    

打印結(jié)果:

thread3寫,寫入93
########thread4讀似枕,讀出93
thread1寫盖淡,寫入604
thread2寫,寫入78
########thread3讀凿歼,讀出165
thread4寫褪迟,寫入165
########thread1讀,讀出604
########thread0讀答憔,讀出78
thread0寫味赃,寫入769
########thread2讀,讀出769
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末攀唯,一起剝皮案震驚了整個(gè)濱河市洁桌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侯嘀,老刑警劉巖另凌,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異戒幔,居然都是意外死亡吠谢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門诗茎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來工坊,“玉大人,你說我怎么就攤上這事敢订⊥跷郏” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵楚午,是天一觀的道長昭齐。 經(jīng)常有香客問我,道長矾柜,這世上最難降的妖魔是什么阱驾? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮怪蔑,結(jié)果婚禮上里覆,老公的妹妹穿的比我還像新娘。我一直安慰自己缆瓣,他們只是感情好喧枷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般割去。 火紅的嫁衣襯著肌膚如雪窟却。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天呻逆,我揣著相機(jī)與錄音夸赫,去河邊找鬼。 笑死咖城,一個(gè)胖子當(dāng)著我的面吹牛茬腿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宜雀,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼切平,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了辐董?” 一聲冷哼從身側(cè)響起悴品,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎简烘,沒想到半個(gè)月后苔严,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孤澎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年届氢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片覆旭。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡退子,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出型将,到底是詐尸還是另有隱情寂祥,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布七兜,位于F島的核電站壤靶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惊搏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一忧换、第九天 我趴在偏房一處隱蔽的房頂上張望恬惯。 院中可真熱鬧,春花似錦亚茬、人聲如沸酪耳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碗暗。三九已至颈将,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間言疗,已是汗流浹背晴圾。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留噪奄,地道東北人死姚。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像勤篮,于是被迫代替她去往敵國和親都毒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在去學(xué)習(xí)go語言鎖機(jī)制的時(shí)候碰缔,我會(huì)問自己幾個(gè)問題: 1.鎖是什么 账劲,為什么要用鎖?2.都有哪些鎖怎么用金抡?3.出現(xiàn)問...
    尼桑麻閱讀 1,082評(píng)論 0 1
  • Mutext兩種模式 正常模式和饑餓模式瀑焦。一開始默認(rèn)處于正常模式。在正常模式中竟终,每個(gè)新加入競(jìng)爭(zhēng)鎖行列的協(xié)程都會(huì)直接...
    尼桑麻閱讀 853評(píng)論 0 2
  • 互斥鎖 互斥鎖的是控制共享資源進(jìn)行訪問的主要手段蝠猬,目的是來保證在同一時(shí)刻只有一個(gè)線程對(duì)該對(duì)象進(jìn)行訪問。類似于開箱關(guān)...
    控期待的蛋閱讀 1,512評(píng)論 0 0
  • var mutex sync.Mutex mutex.Lock() defer mutex.Unlock() //...
    獨(dú)聆步武閱讀 152評(píng)論 0 0
  • 一個(gè)資源,如果需要多個(gè)接口去訪問,那么需要進(jìn)行加鎖, 但是這個(gè)鎖在不同的場(chǎng)景下面是需要加不同的鎖的, 如果胡亂加鎖...
    女神經(jīng)柒月閱讀 2,647評(píng)論 0 1