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

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 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误