我最近在做 并行架构的雷达数据处理输出程序,二进制的多线程安全问题已经解决。
但是对于多线程下的fprintf函数输出文本文件,我有些疑问:
        fprintf是多线程安全的么?从实践来看fprintf似乎是先写入到缓冲区,在fclose时候才输出到硬盘的。
        显然硬盘写入数据能力有限,我很想知道fprintf是否能保证在多线程下写大量不同文件时候,可以保证不丢数据。 

解决方案 »

  1.   

    我只知道printf .如果vc工程是 c++多线程库 则printf用了同步锁. 若是单线程.则printf不用锁.
      

  2.   

    我的程序 运行时库都是设置为 多线程dll 至于测试 这个很难啊~ 这个就算要出错 也要多线程写数据时候超过了 硬盘写入能力才会出错。我想最好是先了解fprintf输出机制了 再做出合理的判断更好。但是尚不清楚 fprintf输出机制 不过感觉上这个函数似乎是先写进缓存 到fclose时候再输出到硬
    盘的?
      

  3.   

    fflush这方法是把缓冲区里的数据立即写入文件fprintf多线程写文件的话你要对该方法进行控制
    比如你可以加关键段锁 
      

  4.   

    我以前碰到fprintf的问题,就算选择了MultiThread下的运行时库貌似也不是多线程安全的。