之前读《程序员的自我修养》一书,一知半解,仅在单线程下进行了演绎,误以为原子操作本身就是线程安全的。
为什么误认为原子操作是线程安全的:
原子操作过程中不可被打断,所以寄存器内的内容就不会被其它线程修改,在原子操作结束后,结果存入内存,才会被切换到别的线程,听起来似乎没有问题。这一系列操作中,原子操作一定能将任务完成,并且返回正确的结果写入内存。什么情形下原子操作不是线程安全的:
当面临多核CPU时,过程就不一样了,当同时对同一变量进行操作时,每个CPU操作的结果无法考虑到另一个CPU的操作,最终结果就会有问题。怎么解决原子操作的线程安全问题
CAS(compare and swap)操作。