我知道原子通常在竞赛条件下使用,并且根据多线程/多处理环境,意味着结果的一致性和确定性。没关系。但是最近我读到了Linux中的原子系统调用,不明白原子在这里实际上意味着什么,即这个原子性是如何实现的。这是否意味着这个系统调用只是使用资源上的锁(例如,目标文件inode上的open() ),或者还有更多的,可能是一些内核保证?我考虑禁用中断,但并不是所有的中断都可以禁用。也许这就足够了,因为内核使用的所有中断都可以被禁用,而其他中断太重要了,可以中断我们的原子系统调用吗?
发布于 2015-03-21 16:55:55
这取决于系统呼叫。引用man 3 read,其中引用了posix编程手册:
I/O是用来对普通文件和管道以及FIFO进行原子化的。原子意味着从一起开始的单个操作中的所有字节一起结束,而不与其他I/O操作交织。这是终端的一个已知属性,这是不被遵守的,并且终端被显式地(并且隐式地永久地)例外,使得行为没有被指定。其他设备类型的行为也未具体说明,但其措辞意在暗示未来的标准可能选择指定原子性(或不指定)。
显然,这只适用于IO操作。
https://stackoverflow.com/questions/29185304
复制相似问题