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