Synchronization

sysfs 的共享訪問

  • August 9, 2016

程序 A 定期(20 次/秒)覆蓋 sysfs 文件 (F) 的第一(也是唯一)行。程序 B 定期(20 次/秒)打開同一個 sysfs 文件(F),讀取第一行並關閉它。

由於 F 是共享資源,並且在上述情況下,兩個程序之間沒有任何同步,因此 B 應該有可能讀取文件中未完全寫入的行。

sysfs 文件也是這樣,還是核心序列化了它的訪問?

sysfs 程式碼在版本 3.14 (2014) 中被部分拆分為一個 kernfs 通用部分,這將使其適合其他子系統擁有虛擬文件系統,因此我們必須查看 sysfs 和 kernfs。

儘管sysfs 程式碼中沒有明顯的序列化,但上面的 kernfs 層在kernfs_file_direct_readkernfs_fop_write中使用互斥鎖,以確保同一文件一次只能發生一次讀取或寫入。使用 mmap() 時也有一些鎖定。

所以你的場景應該是安全的。

引用自:https://unix.stackexchange.com/questions/302003