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

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

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

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

作者:顏開點擊:71次評論:0次標(biāo)簽: Go語言

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

共享變量

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

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

//共享變量有一個讀通道和一個寫通道組成

typesharded_var struct {

         reader chan int

         writer chan int

}

//共享變量維護協(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() {

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

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

         sharded_var_whachdog(v)

         //讀取初始值

         fmt.Println(<-v.reader)

         //寫入一個值

         v.writer <- 1

         //讀取新寫入的值

         fmt.Println(<-v.reader)

}

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

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

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

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

    熱門評論

    最新評論

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

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

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