临界数据临界区和原子操作

Posted midhillzhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了临界数据临界区和原子操作相关的知识,希望对你有一定的参考价值。

1、首先给出这三个名词的定义。

临界数据指多个进程(或线程)会竞争修改的数据。

临界区指修改临界数据的代码区域。

原子操作指临界区的代码不会被这个临界数据的其他临界区的代码打断。

2、通过一个实例来理解这些概念。

在这个实例中临界数据是标准输出,临界数据对应的其中一个临界区就是图中红框部分,红框中的临界区代码不应该被其他临界区打断,否则就有可能出现标准输出被打乱。通过信号量使得临界数据同一时间只能被一个临界区访问。

也就是说如果现在一个临界区在访问这个临界数据,那么当进程进行调度时,绝对不会切换到另一个临界区,只可能切换到其他代码。这也就是上面“同一时间”的含义。

修改stdout的这一系列操作因为不会被其他临界区打乱,所以变成了原子操作。

参考:http://blog.csdn.net/ljianhui/article/details/10243617

 

以上是关于临界数据临界区和原子操作的主要内容,如果未能解决你的问题,请参考以下文章

Go36-29,30-原子操作

操作系统--进程同步(仅仅是轮廓--具体要根据实际项目再深入)

多线程编程之原子锁

Linux内核设计与实现——内核同步

同步互斥

7.进程同步之临界区问题