gpt4 book ai didi

Linux 内核 : is vfs_write thread safe?

转载 作者:太空狗 更新时间:2023-10-29 12:12:59 25 4
gpt4 key购买 nike

在我的程序中,由于某些特殊原因,我需要在内核空间中写入文件,尽管我知道不推荐这样做。

我正在使用 vfs_write 在内核空间中写入文件,它工作正常。在一种情况下,有两个线程需要写入同一个文件

从网上看,用户空间写入似乎是线程安全的,但是,我找不到vfs_write是否线程安全。有人可以帮忙吗?

最佳答案

是的,vfs_write线程安全的

您唯一需要注意的是文件的位置,即您作为 pos 参数传递给函数的指针,在函数调用期间不应更改。

例如,您可以使用 local 变量作为文件的位置,在调用之前将实际位置加载到其中,将指针作为函数的参数传递给它,并在调用之后更新实际位置。此技术用于write syscall implementation :

loff_t pos = file_pos_read(f.file);
ret = vfs_write(f.file, buf, count, &pos);
if (ret >= 0)
file_pos_write(f.file, pos);

如您所见,vfs_write 不会同步并发编写器之间的文件偏移量。并发编写器可能的有用使用场景包括:

  1. Append only:为文件设置O_APPEND标志。在这种情况下,文件中传递给 vfs_write 的位置将被忽略,每个编写器都会将数据附加到文件中。
  2. 仅重写:不为文件设置O_APPEND 标志,并允许每个并发写入者仅修改文件自己的部分。

关于Linux 内核 : is vfs_write thread safe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35451081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com