程序 A 定期(20 次/秒)覆盖 sysfs 文件 (F) 的第一行(也是唯一一行)。程序B定期(20次/秒)打开同一个sysfs文件(F),读取第一行并关闭它。
由于F是共享资源,并且在上述两个程序之间没有任何同步的情况下,B应该有可能读取文件中未完全写入的行。
sysfs 文件也是如此,还是内核会序列化其访问?
答案1
sysfs 代码在版本 3.14(2014)中被部分拆分为 kernfs 公共部分,这将使其适合其他子系统拥有虚拟文件系统,因此我们必须查看 sysfs 和 kernfs。
虽然没有明显的序列化系统文件系统代码,上面的 kernfs 层使用互斥锁kernfs_file_direct_read和kernfs_fop_write确保同一文件一次只能进行一次读取或写入。使用 mmap() 时还有一些锁定。
所以你的场景应该是安全的。