1、首先给出这三个名词的定义。
临界数据指多个进程(或线程)会竞争修改的数据。
临界区指修改临界数据的代码区域。
原子操作指临界区的代码不会被这个临界数据的其他临界区的代码打断。
2、通过一个实例来理解这些概念。
在这个实例中临界数据是标准输出,临界数据对应的其中一个临界区就是图中红框部分,红框中的临界区代码不应该被其他临界区打断,否则就有可能出现标准输出被打乱。通过信号量使得临界数据同一时间只能被一个临界区访问。
也就是说如果现在一个临界区在访问这个临界数据,那么当进程进行调度时,绝对不会切换到另一个临界区,只可能切换到其他代码。这也就是上面“同一时间”的含义。
修改stdout的这一系列操作因为不会被其他临界区打乱,所以变成了原子操作。
参考:http://blog.csdn.net/ljianhui/article/details/10243617
时间: 2024-10-06 05:15:42