清華尹成帶你實戰GO案例(62)Go 原子計數器
Go 原子計數器
Go裡面的管理協程狀態的主要機制就是通道通訊。這些我們上面的例子介紹過。這裡還有一些管理狀態的
機制,下面我們看看多協程原子訪問計數器的例子,這個功能是由sync/atomic包提供的函式來實現的。
我們多執行幾次,結果如下:
ops: 7499289
ops: 7700843
Go裡面的管理協程狀態的主要機制就是通道通訊。這些我們上面的例子介紹過。這裡還有一些管理狀態的
機制,下面我們看看多協程原子訪問計數器的例子,這個功能是由sync/atomic包提供的函式來實現的。
package main
import "fmt"
import "time"
import "sync/atomic"
import "runtime"
func main() {
// 我們使用一個無符號整型來代表一個永遠為正整數的counter
var ops uint64 = 0
// 為了模擬並行更新,我們使用50個協程來每隔1毫秒來
// 增加一下counter值,注意這裡的50協程裡面的for迴圈,
// 也就是說如果主協程不退出,這些協程將永遠執行下去
// 所以這個程式每次輸出的值有可能不一樣
for i := 0; i < 50; i++ {
go func() {
for {
// 為了能夠保證counter值增加的原子性,我們使用
// atomic包中的AddUint64方法,將counter的地址和
// 需要增加的值傳遞給函式即可
atomic.AddUint64(&ops, 1)
// 允許其他的協程來處理
runtime.Gosched()
}
}()
}
//等待1秒中,讓協程有時間執行一段時間
time.Sleep(time.Second)
// 為了能夠在counter仍被其他協程更新值的同時安全訪問counter值,
// 我們獲取一個當前counter值的拷貝,這裡就是opsFinal,需要把
// ops的地址傳遞給函式`LoadUint64`
opsFinal := atomic.LoadUint64(&ops)
fmt.Println("ops:", opsFinal)
}
我們多執行幾次,結果如下:
ops: 7499289
ops: 7700843
ops: 7342417
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
相關文章
- 清華尹成帶你實戰GO案例(19)Go變數Go變數
- 清華尹成帶你實戰GO案例(52)Go數值Go
- 清華尹成帶你實戰GO案例(53)Go 數字解析Go
- 清華尹成帶你實戰GO案例(55)Go 隨機數Go隨機
- 清華尹成帶你實戰GO案例(22)Go常量Go
- 清華尹成帶你實戰GO案例(28)Go 方法Go
- 清華尹成帶你實戰GO案例(35)Go 互斥Go
- 清華尹成帶你實戰GO案例(38)Go 介面Go
- 清華尹成帶你實戰GO案例(46)Go 排序Go排序
- 清華尹成帶你實戰GO案例(47)Go 切片Go
- 清華尹成帶你實戰GO案例(2) Go 字典Go
- 清華尹成帶你實戰GO案例(7)Go DeferGo
- 清華尹成帶你實戰GO案例(7)Go ExitGo
- 清華尹成帶你實戰GO案例(12)Go PanicGo
- 清華尹成帶你實戰GO案例(25)Go 打點器Go
- 清華尹成帶你實戰GO案例(36)Go 環境變數Go變數
- 清華尹成帶你實戰GO案例(44)Go 命令列引數Go命令列
- 清華尹成帶你實戰GO案例(23)Go 超時Go
- 清華尹成帶你實戰GO案例(29)Go 工作池Go
- 清華尹成帶你實戰GO案例(37)Go 集合功能Go
- 清華尹成帶你實戰GO案例(49)Go 時間Go
- 清華尹成帶你實戰GO案例(54)Go 陣列Go陣列
- 清華尹成帶你實戰GO案例(57)Go通道方向Go
- 清華尹成帶你實戰GO案例(63)Go 指標Go指標
- 清華尹成帶你實戰GO案例(8)Go for迴圈Go
- 清華尹成帶你實戰GO案例(17) Go URL解析Go
- 清華尹成帶你實戰GO案例(20)Go 遍歷通道Go
- 清華尹成帶你實戰GO案例(30)Go 關閉通道Go
- 清華尹成帶你實戰GO案例(39)Go 結構體Go結構體
- 清華尹成帶你實戰GO案例(40)Go 程式觸發Go
- 清華尹成帶你實戰GO案例(41)Go 程式執行Go
- 清華尹成帶你實戰GO案例(50)Go 時間戳Go時間戳
- 清華尹成帶你實戰GO案例(58)Go通道緩衝Go
- 清華尹成帶你實戰GO案例(5)Go 自定義排序Go排序
- 清華尹成帶你實戰GO案例(10)Go JSON支援GoJSON
- 清華尹成帶你實戰GO案例(11)Go Line FiltersGoFilter
- 清華尹成帶你實戰GO案例(13)Go range函式Go函式
- 清華尹成帶你實戰GO案例(16)Go Switch語句Go