gpt4 book ai didi

linux - 在 Linux 上以 O_APPEND 模式对文件进行原子写入和告知

转载 作者:太空宇宙 更新时间:2023-11-04 11:50:02 24 4
gpt4 key购买 nike

我正在处理这样一种情况,我想为具有许多进程和这些进程中的许多线程的应用程序持久保存状态。通常这需要大量使用锁定来确保没有冲突。

我希望通过使用 O_APPEND 模式将数据保存到文件中来避免这种情况。这样只要我确保数据 <4KiB 写入文件就会是原子的。如果我使用仅附加数据结构,那么我就有了一个无锁解决方案。

但是,为了使其正常工作,我需要在写入文件后知道数据在文件中的位置。我遇到的问题是我找不到写入的系统调用一个文件,然后告诉我该文件中写入的偏移量。

我可以使用先写后搜索来发现这个位置。然而如果另一个线程共享同一个文件描述符,这是不安全的,因此需要我使用互斥锁来保护写入,这违背了我避免锁定的努力。

检查 write、writev、pwrite 和 prwritev 的手册页没有显示任何内容可以执行写入,然后将写入后的偏移量作为单个系统调用告诉我,我完全知道可能没有.我是不是看错了什么?

最佳答案

If I make use of append only data structures then I have a lock free solution.

当代码为常规文件调用write 时,内核做的第一件事是获取文件读写信号量。您的所有写入线程都在内核中的该信号量上进行序列化。

参见 vfs_write ,它调用 file_start_write 最终获取信号量。

关于linux - 在 Linux 上以 O_APPEND 模式对文件进行原子写入和告知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56333863/

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