无锁同步 #66
luanshaotong
started this conversation in
General
无锁同步
#66
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
实现rpc循环队列的时候,以及其他队列的时候,需要对同一个变量进行读取和+1,在多线程情形下需要加锁来实现。
实际上多硬件平台支持将这类复杂的指令操作原子化,封装成了高级的指令。例如在c++11后,可以使用__sync_fetch_and_add(&a,1)接口来读取a并将a加1,同时保证操作的原子性。
在rust中,也可以使用类似的操作:
Rust core::sync::atomic::AtomicU64.fetch_add
pub fn fetch_add(&self, val:u64, order:Ordering) -> u64
同样在atomic包中还有类似的多个指令,可以实现各种原子操作。这些操作是由芯片实现保证了操作的原子性,而并没有使用锁,故而拥有更好的性能。
Beta Was this translation helpful? Give feedback.
All reactions