沒有atomic h後如何在linux實現原子操作

2021-05-26 05:06:53 字數 527 閱讀 4178

2010-12-30更新

今天同事告訴我說有個/usr/include/alsa/iatomic.h,也能實現原子操作,使用的時候#include就可以了,原有的atomic系列函式這裡都有,不過我還沒試過。

-------------------------------正文---------------------------------------

在linux2.6.18之後,刪除了和,gcc提供了內建的原子操 作函式,更適合使用者態的程式使用。現在atomic.h在核心標頭檔案中,不在gcc預設搜尋路徑下,即使像下面這樣強行指定路徑,還是會出現編譯錯誤。

gcc從4.1.2提供了__sync_*系列的built-in函式,用於提供加減和邏輯運算的原子操作,我是傳送門 。

可以對1,2,4或8位元組長度的數值型別或指標進行原子操作,其宣告如下

這兩組函式的區別在於第一組返回更新前的值,第二組返回更新後的值,下面的示例引自這裡 。

對於使用atomic.h的老**,可以通過巨集定義的方式,移植到高核心版本的linux系統上,例如

沒有atomic h後如何在linux實現原子操作

2017 04 22更新 gcc 4.7 開始支援c 11的記憶體一致性模型,提供了 atomic 系列函式,可以替代原有的 sync 系列。在訪存行為上,更為清晰,推薦使用。2011 09 06更新 需要使用atomic add return函式,發現編譯時找不到該函式的入口,閱讀iatomic....

如何在沒有https環境下使用webrtc

新版本的webrtc使用需要https,但是在內網開發除錯時,要配置https環境比較麻煩,下面的方法是教你如何在http下使用webrtc 1,點桌面上的chrome圖票,右鍵 屬性,把目票輸入框中的內容換成以下內容 unsafely treat insecure origin as secure...

如何在輸入空行後停止輸入

最近碰到乙個遇到空行結束輸入,我就很蒙蔽,所以總結一下 public static void main string args system.out.println over input 以上 第一處判斷條件可以替換為in.hasnextline 但是不可以是in.hasnext 第二處判斷條件可以...