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

2021-05-23 23:57:13 字數 977 閱讀 9919

2017-04-22更新

gcc 4.7 開始支援c++11的記憶體一致性模型,提供了__atomic**系列函式,可以替代原有的__sync**系列。

在訪存行為上,更為清晰,推薦使用。

2011-09-06更新

需要使用atomic_add_return函式,發現編譯時找不到該函式的入口,閱讀iatomic.h後發現在i386和x86_64平台下,不支援帶有return字尾函式,例如atomic_sub_return,atomic_inc_return等,但支援test字尾函式,如atomic_sub_and_test等。

在其它平台,如powerpc、mips、arm下支援全系列的原子操作。真不知設計這個標頭檔案的人是怎麼想的。

2010-12-30更新

/usr/include/alsa/iatomic.h,也能實現原子操作,使用的時候#include就可以了,原有的atomic系列函式這裡都有,包括atomic_read、atomic_set、atomic_inc、atomic_add、atomic_sub,但是該函式在redhat(rhel)6.0以上版本也被取消了。

只支援32位資料的原子操作。

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

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

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

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

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

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

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

2010 12 30更新 今天同事告訴我說有個 usr include alsa iatomic.h,也能實現原子操作,使用的時候 include就可以了,原有的atomic系列函式這裡都有,不過我還沒試過。正文 在linux2.6.18之後,刪除了和,gcc提供了內建的原子操 作函式,更適合使用者...

如何在沒有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 第二處判斷條件可以...