相关概念
并发:宏观上是同时,微观上仍是顺序执行
并行:同时间执行
并发安全
1.多个cpu修改同一个值影响原子性
2.cpu缓存一致性影响可见性 cpu缓存和volatile
缓存一致性不是实时一致性, cpu1修改共享缓存a, 写到自己的store buffer中,同时通知其他cpu更新cacheline;其他cpu收到通知后会加入到自己的invalid queue中,延后更新. 这样就会导致 cpu2读取不到a的最新值。
3.指令重排影响有序性 apache/incubator-brpc
数据安全访问
方式 | 样例 | 备注 |
---|---|---|
lock | 互斥锁,读写锁,自旋锁 | 锁的切换有开销 |
memory barrier | atomic(CAS) | 1.编译器与cpu无法乱序执行,无法得到相应加速效果,保证可见性和有序性; 2.适合冲突较少的简单对象的操作,如果太多线程同时自旋,那么长时间循环会导致 CPU 开销大; 3.ABA问题(引入变量版本号解决),进阶CAS2,DCAS |
COW | double-buffer(智能指针交换), Hazard pointer, Rcu(延后处理) | 需要处理旧数据的内存释放 |