以共享(允读允写)模式打开文件,然后在写入之前先LockFile.

解决方案 »

  1.   

    注意查MSDN看看LockFile的参数以及参数的意义...
      

  2.   

    每个进程写文件时都用独享方式打开,写完后关闭,一旦打开失败说明其他进程正在读,这时sleep一段时间再试
      

  3.   

    僵哥说的lockFile第一次看到,学习
      

  4.   

    LockFile在有别的进程访问文件时,会立即返回。
    如果想让进程在此时阻塞,省得再去Sleep,可以用LockFileEx,不要加LOCKFILE_FAIL_IMMEDIATELY选项即可。
      

  5.   

    如果只以共享的方式打开,不做任何lock处理,系统底层会帮助协调竞争么?有谁做过试验,或者有相关代码吗?谢谢
      

  6.   

    我的意思是多个"进程"同时""一个以共享方式打开的文件时,会不会出现一个进程写了半行,然后接着其它进程跟着写了半行的情况。当写文件存在竞争的情况下,是操作系统保证写得原子性,还是需要通过程序中的同步机制来保证写得原子性。
    系统底层api,或者fprintf这样标准的带缓冲的函数,对于共享文件上的写竞争的是怎么处理的?有可以参考的介绍,或者试验吗?谢谢
      

  7.   

    从理论上说,系统底层会保证在一次写请求未完成之前,不会插入其它线程的写请求。但文件不是“流”,实际多进程操作时,每次执行写文件时必须事先确定要写入的位置,无法在写文件时指定把数据写到文件末尾,这样当两个进程同时写文件时,就会产生相互覆盖的情况。如果要解决这个问题,最简单的做法是每次写文件前以非独占方式打开文件,写完之后关闭文件。也可以用命名对象实现线程同步等方法。
    另外目前VC中的fprintf函数不是一次写入文件的,如果使用这个函数需要自己处理线程同步。
      

  8.   

    使用互斥量同步访问文件句柄。
    Mutex
    Event
      

  9.   

    1. 写文件函数加锁
    2. 写文件开一个线程,其他线程往这个线程post消息