c++ - fopen 和 fwrite 从多个线程到同一个文件

标签 c++ c multithreading

这与现有问题类似但又有些不同。假设我有许多线程打开同一个文件,但它们都执行自己的 fopen 并维护自己的 FILE 指针。 a) 如果 fwrite 调用有自己的 FILE 指针,是否有必要锁定它们? b) 如果有必要,围绕 fwrite 进行锁定是否足够,或者它们是否可能在不同时间刷新并在刷新时最终混合在一起?如果是,锁定 fwrite 然后 fflush 会覆盖它吗?

最佳答案

这个问题无法在编程语言的上下文中得到回答。就编程语言而言,这些文件句柄是完全独立的对象,您对其中一个所做的任何操作都不会影响另一个。

问题在于操作系统——它能否同时处理对同一底层文件的多个写入操作。换句话说,那些写入是原子的。我不能说所有这些,但是在 Linux 中,例如,小于 PIPE_BUF 大小的写入是原子的。

关于c++ - fopen 和 fwrite 从多个线程到同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48101799/

相关文章:

c++ - 对类的私有(private)函数的 undefined reference

c++ - `std::terminate` 是怎么知道要特殊对待 `std::exception` 的呢?

c++ - CArray 不会在内存重新分配时调用复制构造函数,现在怎么办?

python - 为什么C中的运行时是如此随机?

c - 如何将位放入字符数组

c++ - 我如何在 Symbian 上检索 SMS 收件箱消息,最好使用 j2me?

java - 调用notifyAll有什么好的解决方案吗?

multithreading - 所有权和借用问题,以及跨多个线程共享实例

c# - 在线程中访问 UI

c - 获得近似时差的最快方法