Synchronization
sysfs 的共享訪問
程序 A 定期(20 次/秒)覆蓋 sysfs 文件 (F) 的第一(也是唯一)行。程序 B 定期(20 次/秒)打開同一個 sysfs 文件(F),讀取第一行並關閉它。
由於 F 是共享資源,並且在上述情況下,兩個程序之間沒有任何同步,因此 B 應該有可能讀取文件中未完全寫入的行。
sysfs 文件也是這樣,還是核心序列化了它的訪問?
sysfs 程式碼在版本 3.14 (2014) 中被部分拆分為一個 kernfs 通用部分,這將使其適合其他子系統擁有虛擬文件系統,因此我們必須查看 sysfs 和 kernfs。
儘管sysfs 程式碼中沒有明顯的序列化,但上面的 kernfs 層在kernfs_file_direct_read和kernfs_fop_write中使用互斥鎖,以確保同一文件一次只能發生一次讀取或寫入。使用 mmap() 時也有一些鎖定。
所以你的場景應該是安全的。