在某些情況下,編碼器不能依靠系統調用是原子的,例如,如果該文件位於NFS文件系統上。 (c.f. NFS Overview, FAQ and HOWTO Documents)。但是大多數數據庫工作最終都需要原子系統調用。 (c.f. Atomicity of database systems)。程序員如何確定「寫入」系統調用是否在特定文件上是原子的?
是否存在一個標準(和操作系統無關)確認寫入(和其他系統調用)的方式在C(或python)中的特定FILE上是原子的。
有什麼建議嗎?
隨後的說明:原子性的管道在下面的討論:
- unix pipe multiple writers
- What happens if a write system call is called on same file by 2 different processes simultaneously
注中,特別是 「人」 的網頁中提取與O_APPEND專門處理:
如果設置了文件狀態標誌的O_APPEND標誌,文件 偏移量應在每次寫入之前設置爲文件末尾,並且不應在文件偏移量和寫入操作發生變化 之間發生介入文件修改操作 。
我想你會發現數據庫不需要原子系統調用:它們需要對數據庫進行原子更新的*外觀*,但是這是使用事務日誌完成的。在任何時候,實際的數據庫文件可能不一致,但事務日誌包含所需的信息以使其再次保持一致。 – Duncan
NFS只是充滿了高度破碎,不符合規範的行爲,使其不適用於大多數用途。使用smb/cifs/9p/anything-but-nfs用於嚴重的網絡文件系統使用。 –
大多數數據庫採用的方法似乎是在*「不要在NFS上運行此操作」*行的文檔中突出註釋。 – caf