相关概念
并发:宏观上是同时,微观上仍是顺序执行
并行:同时间执行
并发安全
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(延后处理) | 需要处理旧数据的内存释放 |
博客围绕C++并行编程展开,介绍了并发和并行的概念,并发是宏观同时、微观顺序执行,并行是同时执行。还阐述了并发安全问题,包括多CPU修改值影响原子性、CPU缓存一致性影响可见性、指令重排影响有序性,最后提及数据安全访问。
4008

被折叠的 条评论
为什么被折叠?



