西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)其它知識(shí) → Go語言并發(fā)之美:解釋其中內(nèi)核、外延

Go語言并發(fā)之美:解釋其中內(nèi)核、外延

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:微博時(shí)間:2012/11/28 13:47:54字體大。A-A+

作者:顏開點(diǎn)擊:71次評(píng)論:0次標(biāo)簽: Go語言

Flash版LOGO語言V9.8 免費(fèi)簡(jiǎn)體中文版
  • 類型:編程工具大。3.2M語言:中文 評(píng)分:6.3
  • 標(biāo)簽:
立即下載
7 頁 共享變量

共享變量

        協(xié)程之間的通信只能夠通過通道。但是我們習(xí)慣于共享變量,而且很多時(shí)候使用共享變量能讓代碼更簡(jiǎn)潔。比如一個(gè)Server有兩個(gè)狀態(tài)開和關(guān)。其他僅僅希望獲取或改變其狀態(tài),那又該如何做呢?梢詫⑦@個(gè)變量至于0通道中,并使用一個(gè)協(xié)程來維護(hù)。

下面的例子描述如何用這個(gè)方式,實(shí)現(xiàn)一個(gè)共享變量。

//共享變量有一個(gè)讀通道和一個(gè)寫通道組成

typesharded_var struct {

         reader chan int

         writer chan int

}

//共享變量維護(hù)協(xié)程

funcsharded_var_whachdog(v sharded_var) {

         go func() {

                   //初始值

                   var value int = 0

                   for {

                            //監(jiān)聽讀寫通道,完成服務(wù)

                            select {

                            case value =<-v.writer:

                            case v.reader <-value:

                            }

                   }

         }()

}

funcmain() {

         //初始化,并開始維護(hù)協(xié)程

         v := sharded_var{make(chan int),make(chan int)}

         sharded_var_whachdog(v)

         //讀取初始值

         fmt.Println(<-v.reader)

         //寫入一個(gè)值

         v.writer <- 1

         //讀取新寫入的值

         fmt.Println(<-v.reader)

}

        這樣,就可以在協(xié)程和通道的基礎(chǔ)上實(shí)現(xiàn)一個(gè)協(xié)程安全的共享變量了。定義一個(gè)寫通道,需要更新變量的時(shí)候,往里寫新的值。再定義一個(gè)讀通道,需要讀的時(shí)候,從里面讀。通過一個(gè)單獨(dú)的協(xié)程來維護(hù)這兩個(gè)通道。保證數(shù)據(jù)的一致性。

        一般來說,協(xié)程之間不推薦使用共享變量來交互,但是按照這個(gè)辦法,在一些場(chǎng)合,使用共享變量也是可取的。很多平臺(tái)上有較為原生的共享變量支持,到底用那種 實(shí)現(xiàn)比較好,就見仁見智了。另外利用協(xié)程和通道,可以還實(shí)現(xiàn)各種常見的并發(fā)數(shù)據(jù)結(jié)構(gòu),如鎖等等,就不一一贅述。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)