以POSIX为例

规范 要求

If two threads each call one of these functions, each call shall either see all of the specified effects of the other call, or none of them.

然而从原子性的角度,write()并不是原子的。如果有数据竞争,可能导致写入垃圾数据,需要在用户态完成加锁同步。

另一方面,在实际的buffered I/O中,页缓存是所有线程/CPU共享的,一旦数据写入就全局可见,因此不会出现类似TSO的执行。如果使用mmap(),则I/O使用load/store语义,可能会有WMM执行1

Footnotes

  1. 也许需要实际的测试