c++ 原子操作 赋值_原子操作原理
1. 概念
原子操作是指不被打斷的操作,即它是最小的執(zhí)行單位。最簡(jiǎn)單的原子操作就是一條條的匯編指令(不包括一些偽指令,偽指令會(huì)被匯編器解釋成多條匯編指令)。在 linux 中原子操作對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)為 atomic_t,定義如下:
本質(zhì)上就是一個(gè)整型變量,之所以定義這么一個(gè)數(shù)據(jù)類型,是為了讓原子操作函數(shù)只接受 atomic_t 類型的操作數(shù),如果傳入的不是 atomic_t 類型數(shù)據(jù),在程序編譯階段就不會(huì)通過;另一個(gè)原因就是確保編譯器不會(huì)對(duì)相應(yīng)的值進(jìn)行訪問優(yōu)化,確保對(duì)它的訪問都是對(duì)內(nèi)存的訪問,而不是對(duì)寄存器的訪問。2. 賦值操作
ARM 處理器有直接對(duì)內(nèi)存地址進(jìn)行賦值的指令(STR)。
3. 讀操作
用 volatile 來防止編譯器對(duì)變量訪問的優(yōu)化,確保是對(duì)內(nèi)存的訪問,而不是對(duì)寄存器的訪問。
4. 加操作
使用獨(dú)占指令完成累加操作。
5. 減操作
對(duì)比加操作和減操作的代碼可以看出,它們非常的相似,其實(shí)不同的地方就一句,所以現(xiàn)在最新的內(nèi)核源碼中已經(jīng)使用宏定義 ATOMIC_OP(op, c_op, asm_op) 來重寫了這部分代碼。
6. 其他操作
類似的原子操作函數(shù)還有一些,比如 atomic_XXX_return、atomic_cmpxchg、atomic_clear_mask,以及在此基礎(chǔ)上實(shí)現(xiàn)的 atomic_inc、atomic_dec、atomic_XXX_and_test、atomic_XXX_return等。以上代碼都是針對(duì) SMP 處理器的實(shí)現(xiàn)方式,針對(duì)非 SMP 處理器,由于不存在其他核心的搶占,所以只需要防止其他進(jìn)程搶占即可實(shí)現(xiàn)原子操作,例如加操作:
7. 總結(jié)
原子性操作的實(shí)現(xiàn)需要具體體系結(jié)構(gòu)相關(guān)的指令集的支持。
總結(jié)
以上是生活随笔為你收集整理的c++ 原子操作 赋值_原子操作原理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ib网卡命令_infiniband网卡安
- 下一篇: c++ 将集合set的数据输出到数组中_