Skip to content

Latest commit

 

History

History
54 lines (32 loc) · 1.64 KB

atomic_lock_freedom.md

File metadata and controls

54 lines (32 loc) · 1.64 KB

今天阅读了几篇「无锁编程」的文章(虽然没怎么看懂,尤其是陈皓写的),

发现大伙普遍承认Atomic类型的性能比Mutex互斥锁好很多

调研了Java/C++/Rust的Atomic的库后发现

库基本上只提供Atomic的整数类型或布尔值类型

以Rust为例,想用非布尔值非整数的Atomic只能用AtomicPtr

而AtomicPtr用起来要小心,读写可能会陷入unsafe


Rust文档中的AtomicPtrExample写法不适用于static作用域

error[E0658]: references in statics may only refer to immutable values

查阅资料后找到能通过编译的写法

pub static mut WORKDAYS: AtomicPtr = AtomicPtr::new(std::ptr::null_mut());

Write:

unsafe {
    *WORKDAYS.get_mut() = &mut String::from("test");
}

Read:

println!("[{}]", unsafe { &*WORKDAYS.load(atomic::Ordering::SeqCst) });

atomic 和 ptr::read_volatile

volatile 保证触发读写,跟 atomic 应该是正交的

原子序

苦于不懂计算机相关理论,只好将Atomic当RwLock用

读取用Relaxed原子序,写入时用SeqCst原子序

See Also