使用c ++在文件中同时写入

时间:2014-11-11 09:04:23

标签: c++ windows

如何在不锁定文件的情况下同时从多个线程写入文件。我尝试了共享读写方法。这种方法的问题是要在文件上写入我需要锁定。所以任何人都可以帮我解决一个我无需锁定的解决方案。

2 个答案:

答案 0 :(得分:2)

由于并行写入从性能角度来看是非常有用的(特别是,编写大块数据通常会使性能变得很糟糕),一种解决方案可能是拥有一个单独的写入线程,带有某种类型的数据包队列使用要写入的数据,其中多个线程可以添加到队列中,并且只有一个线程正在读出队列并写入文件。

现在,当然,您可能需要锁定队列。有一些多个写无锁队列(但通常不是严格“无等待”,只是没有大锁,而是在循环中使用比较交换或类似来确保写入正确的数据)。此外,将数据复制到队列中的锁定比将数据写入文件所花费的时间短得多。

您可能需要对队列进行流量控制(“等待队列有超过X个字节要写”或某些此类),这样您就没有十几个线程都将新数据写入文件尽可能快地填写所有可用内存 - 但只有当你有很多机会同时写几个线程时才需要这样做。

答案 1 :(得分:0)

始终同时从多个线程写入文件将导致无法检测到的行为。文件可能损坏或应用程序可能崩溃。

有两种选择:

  • 用于写入的单写线程。
  • 使用Lock。

在最糟糕的情况下,您可以尝试采取EXCLUSIVE锁定。如果你有EXCLUSIVE锁,那么你可以写。否则请循环,直到获得EXCLUSIVE锁定。