1、原子操作
原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就会一直运行到结束,中间不会有任何的上下文切换。
原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分,将整个操作视为一个整体是原子性的核心特征。
2、等待另一个线程
除了访问共享变量之外,线程之间的交互还有,等待另一个线程完成某些操作。
例如当进程执行磁盘I/O并进入睡眠状态时,会产生这种交互,当I/O完成时,该进程需要从睡眠中唤醒,以便继续进行。
3、接下来的重点
针对原子性,要构建对同步原语的支持,来支持原子性。
针对于线程等待,要考虑构建在多线程程序中,常见的睡眠/唤醒交互的机制。
4、原子操作补充
原子操作是构建计算机系统的最强大的基础技术之一,从计算机体系结构到并行代码、文件系统、数据库管理系统,甚至分布式系统。
将一系列动作原子化背后的想法可以简单用一个短语表示:“全部或没有”。看上去,要么你希望组合在一起的活动都发生了,要么它们都没有发生。不会看到中间状态。有时,将许多行为组合为单个原子动作称为事务,这是一个在数据库和事物处理世界中非常详细地发展地概念。
在探讨并发的主题中,我们将使用同步原语,将指令的短序列变成原子性的执行快。但是我们会看到,原子性的想法远不止这些。例如文件系统使用诸如日志记录或写入时复制等技术自动转换其磁盘状态,这对于在系统故障时正确运行至关重要。