atomic operations

atomic operations

 

int atomic_xchg ( volatile __global int *p, int val)

Description

Swaps the old value stored at location p with new value given by val. Returns old value.

from: https://www.khronos.org/registry/OpenCL/sdk/1.1/docs/man/xhtml/atomic_xchg.html

 

Linux内核同步原语之原子操作(Atomic)

https://blog.csdn.net/Roland_Sun/article/details/107115267

 

尽可能使用acquire和release语义进行同步

相比ARMv7,ARMv8增加了load-acquire(LDLARB,LDLARH和LDLAR)和store-release(STLLRB,STLLRH和STLLR)指令,这可以直接支持c++原子库中的相关语义。这些指令可以理解成半屏障。这些半屏障指令的执行效率要比全屏障更高,所以在能够使用这种类型的屏障时,我们尽可能acquire和release语义来做线程间的同步。

Read-Acquire用于修饰内存读取指令,一条 read-acquire 的读指令会禁止它后面的内存操作指令被提前执行,即后续内存操作指令重排时无法向上越过屏障。

Write-Release用于修饰内存写指令,一条 write-release 的写指令会禁止它上面的内存操作指令被乱序到写指令完成后才执行,即写指令之前的内存操作指令重排时不会向下越过屏障。

from:

https://support.huaweicloud.com/codeprtr-kunpenggrf/kunpengtaishanporting_12_0049.html

 

 

Linux内核API 同步机制

https://deepinout.com/linux-kernel-api/linux-kernel-api-synchronization-mechanism/linux-kernel-api-synchronization-mechanism.html

 

 

xchg()

#define xchg(ptr, new) \

xchg()的功能是将new的值保存到ptr所指向的地址,并返回ptr地址原先的值

 

posted @ 2021-07-17 16:31  aspirs  阅读(65)  评论(0编辑  收藏  举报