多个线程写在同一个文件上

我想知道我们是否可以使用多个线程在同一个文件上写二进制数据。

FILE *fd = openfile("test"); int SIZE = 1000000000; int * table = malloc(sizeof(int) * SIZE); // .. filling the table fwrite(table, sizeof(*table), SIZE, fd); 

所以我想知道我是否可以使用线程,并且每个线程调用fssek来寻找不同的位置来写入同一个文件。

任何的想法 ?

fwrite应该是线程安全的,但无论如何你都需要一个互斥锁,因为你需要寻找和写入是primefaces的。 根据您的平台,您可能有一个带偏移量的写入function,或者您可能能够在每个线程中打开该文件。 如果你的代码建议你在内存中拥有所有内容,那么更好的选择就是让每个线程填充到一个大型数组中,然后在完成所有内容时将其写出来。

虽然fread()fwrite()是线程安全的,但是由FILE*表示的流缓冲区不是。 因此,您可以让多个线程访问同一个文件,但不能通过相同的FILE* – 每个线程必须有自己的,并且它们引用的文件必须是可共享的 – 这取决于操作系统。

另一种可能更简单的方法是使用内存映射文件 ,以便每个线程将文件视为共享内存,并让操作系统处理文件I / O. 与普通文件I / O相比,这具有明显的优势,因为它是真正的随机访问,因此您无需担心fseek()和顺序读/写等。

fseek和fwrite是线程安全的,因此您无需额外同步即可使用它们。

让每个线程打开文件,并确保它们写入不同的位置,最后让每个线程关闭文件并完成。

更新:

这至少适用于IX’系统。