在前一個實例中,我們看到如何以 原子化運算子 管理單純的計數器狀態。對於更複雜的狀態,我們可以使用 互斥鎖,跨多個 goroutine 安全地存取資料。 |
|
![]() ![]()
|
|
|
|
Container 包含一個計數器對映;由於我們想要讓多個 goroutine 同時更新它,因此我們加入一個 |
|
在存取 `counters` 前鎖住互斥鎖;在函式尾端使用 defer 語句解鎖。 |
|
|
|
注意互斥鎖的零值可以直接使用,所以這裡不需要初始化。 |
|
|
|
|
|
此函式會在迴圈中增加一個命名計數器。 |
|
同時執行數個 goroutine;注意它們都存取同一個 |
|
等待 goroutine 執行完畢 |
|
執行程式後會顯示計數器更新為預期結果。 |
|
接下來我們將著眼於使用僅有 goroutine 和通道來實作相同的狀態管理任務。 |
下一個範例:有狀態的 goroutine。