atomic原子操作在一些場景下,相比於其他的併發原語,效能更優
舉個例子:假設你想在程式中使用乙個標誌(flag,比如乙個 bool 型別的變數),來標識乙個定時任務是否已經啟動執行了,你會怎麼做呢?我們先來看看加鎖的方法。如果使用 mutex 和 rwmutex,在讀取和設定這個標誌的時候加鎖,是可以做到互斥的、保證同一時刻只有乙個定時任務在執行的,所以使用 mutex 或者 rwmutex 是一種解決方案。其實,這個場景中的問題不涉及到對資源複雜的競爭邏輯,只是會併發地讀寫這個標誌,這類場景就適合使用 atomic 的原子操作。具體怎麼做呢?你可以使用乙個 uint32 型別的變數,如果這個變數的值是 0,就標識沒有任務在執行,如果它的值是 1,就標識已經有任務在完成了。你看,是不是很簡單呢?
package main
import
("fmt"
"math/rand"
"sync"
"sync/atomic"
"time"
)type config struct
func loadnewconfig(
) config
}func main())
// 設定新的config
go func()}
()go func()}
()select
}
參考:
atomic:要保證原子操作,一定要使用這幾種方法
原子操作 atomic
所謂的原子操作,取的就是 原子是最小的 不可分割的最小個體 的意義,它表示在多個執行緒訪問同乙個全域性資源的時候,能夠確保所有其他的執行緒都不在同一時間內訪問相同的資源。也就是他確保了在同一時刻只有唯一的執行緒對這個資源進行訪問。這有點類似互斥物件對共享資源的訪問的保護,但是原子操作更加接近底層,因...
原子操作atomic
c 中有atomic類和atomic flag兩個類,其中atomic類用於定義乙個原子操作,atomic flag定義一些與原子操作相關的函式 如下操作 atomic原子操作.cpp 定義控制台應用程式的入口點。一般的操作如上,我們開啟兩個執行緒,定義乙個全域性變數n,定義乙個執行緒函式,想要執行...
Atomic原子操作類詳解
1 基本介紹 atomic,是一種採用樂觀鎖方式實現執行緒安全的 可以高效保證執行緒安全的去更新基本變數,陣列,引用型別 其實現的底層原理是cas 底層操作邏輯 cas v,o,n 三個值分別是 v記憶體位址存放的實際值 o預期的值 n更新的新值 當v o表示沒有被其他執行緒更改過,沒有衝突進行更新...