atomic原子操作

2021-10-13 21:22:54 字數 721 閱讀 5771

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表示沒有被其他執行緒更改過,沒有衝突進行更新...