beyond8820 2018-04-27 06:53 采纳率: 0%
浏览 3228
已结题

fopen 频繁写文件问题,谢谢

recieve 线程收到消息后,转给另外一个线程B进行处理,B会打开一个文件,
并将消息内容写入文件,然后关闭文件。现在因为频繁写,出现了open file error问题。

2018/04/26 10:28:44.222 I ThreadB Process message: src= 5

2018/04/26 10:28:44.223 I ThreadB Process message: src= 0

2018/04/26 10:28:44.482 I ThreadB Process message: src= 1

2018/04/26 10:28:44.482 E ThreadB Error Opening ** file: C:\writting.txt

2018/04/26 10:28:44.482 I ThreadB Process message: src= 2

2018/04/26 10:28:44.482 E ThreadB Error Opening ** file: C:\writting.txt

2018/04/26 10:28:44.482 I ThreadB Process message: src= 3

2018/04/26 10:28:44.482 E ThreadB Error Opening ** file: C:\writting.txt

从log可以看到从src 0和5发来的message,可以正确处理,并更新文件,但是从src 1/2/3发来的消息,会在同一时间发起fopen操作,然后报error,请问大牛,在同一个线程中,为什么会出现这种情况呢?

code结构很老,没有看到用message queue或者同步的处理,基于这种现象,求解释。

谢谢

  • 写回答

11条回答 默认 最新

  • beyond8820 2018-04-27 07:48
    关注

    补充一下,需求是,有两个进程对同一个文件进行读写操作,进程A 要频繁写文件,更新里面的数据。进程B会每隔几秒读取一次文件中的数据,
    因为操作太过于频繁,所以当前代码的处理是,先在一个临时文件中进行写操作,然后copy文件到另外一个文件中,由进程B对另一个文件进行读操作。
    尽量分开读写操作,这是好多年前的做法了,现在应该有更好的解决办法了吧。

    但是报error的情况也比较特殊,看log是毫秒级别的写,但是大多数情况没有问题,只有个别时间点,会集中进行两三次的fopen操作,这个我难以解释。
    所以来求助了:)

    评论

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料