gpt4 book ai didi

c - 两个进程同时调用 open,一个 "W",另一个 "r"。发生错误?

转载 作者:行者123 更新时间:2023-11-30 15:59:41 25 4
gpt4 key购买 nike

假设我有一个进程调用 A,它调用 fopen(filename,"w");每秒,并向其中写入数据,而进程 B 每隔 0.2 秒调用 fopen(filename,"r") 并从中读取数据!

在极少数情况下,当 A 正在写入数据时,在 A fclose 之前,B 进程会 fopen 并从中读取数据。我认为它有同步问题!

在线程中使用互斥体很容易,但我还没有尝试过进程之间的互斥体。数据最多只有400字节,我想知道有什么简单的方法可以避免一个进程写入数据,而另一个进程同时读取数据,或者当一个进程A打开一个文件时,另一个进程B会等到进程A fclose 文件!

最佳答案

如果您必须使用文件(正如@aix所说,可能有更好的方法),请不要尝试在写入文件时读取文件,否则结果将是不确定的。

相反,将数据写入不同的文件名,关闭它,然后将其移动到正确的位置(在 Linux 上,使用 rename())。

如果您不喜欢这样,请尝试使用文件锁。至少在 Linux 上,这些实际上并不会阻止对文件的访问,它们只是充当进程间互斥体。您没有说明您拥有什么操作系统,但对于 Linux,请参阅 man 2集群

关于c - 两个进程同时调用 open,一个 "W",另一个 "r"。发生错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8532100/

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