原子操作和互斥量的区别
原子操作和互斥锁都是并发编程中常见的技术。
原子操作
原子操作就是操作过程中不能被中断的过程,在针对某个值得原子操作,在被进行的过程中CPU
绝对不会再进行其他的针对该值的操作。原子操作仅会由一个CPU
指令代表和完成,原子操作是无锁的,常常直接通过CPU
指令直接实现。其他同步技术实现常常依赖于原子操作。
互斥锁和原子锁的区别
严格来说互斥锁是一个数据结构,是写代码开发人员人为约束的一种都要遵循的一系列操作。 原子操作是单个不可被打断的操作,没有其他线程可以打断它。
- 原子操作的优势是更加轻量,可以在不形成临界区的情况下完成并发安全的值得替换操作。可以大大减少同步对程序性能的消耗。
- 原子操作的劣势,原子操作是乐观的,总是假设操作未被改变,在被操作的值被频繁改变的情况下,原子操作并不那么容易成功,而使用互斥锁总是趋于悲观,我们总是假设会有并发的操作要修改被操作的值,因此使用锁对一系列操作加上临界区保护。
- 互斥锁是一种数据结构,用来让一个线程执行程序的关键部分
- 原子操作针对单个值
- 互斥锁是悲观锁,总是假设有另外一个线程对要修改的数据有竞争关系。