http://www.parallellabs.com/2010/04/15/atomic-operation-in-
multithreaded-application/
多线程程序中操作的原子性
0. 背景
原子操作 就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常
用来实现一些同步机制,同时也是一些常见的多线程 的源头。本文主要讨论了三个问
题:多线程程序中对变量的读写操作是否是原子的?多线程程序中对 (位
域)的读写操作是否是线程安全的?程序员该如何使用原子操作?
1. 多线程环境下对变量的读写操作是否是原子的?
我们先从一道很热门的百度笔试题讲起。很多人讲不清楚其背后的原理,我们就对它进行
一下剖析(其实这个题目有点歧义,后面我们会讲到):
以下多线程对 int 型变量 x 的操作,哪几个需要进行同步:( )
A. x=y; B. x++; C. ++x; D. x=1;
要彻底理解这个问题,我们首先需要从硬件讲起。以常见的 来说,根据 的
参考手册 ,它基于以下三种机制保证了多核中加锁的原子操作( 节):
()(注: 节有详细介绍)
() !"#$%!"#$&
()!!'!!(
!)!*+!!
!, -'
这三个机制相互独立,相辅相承。简单的理解起来就是
()一些基本的内存读写操作是本身已经被硬件提供了原子性保证(例如读写单个字节
的操作);
()一些需要保证原子性但是没有被第()条机制提供支持的操作(例如 .
-'./)可以通过使用”"#$%0来锁定总线,从而保证操作的原子性