据我所知,当我将文件扩展到2GB长度时,ftruncate(2)不可能是原子的。
但幕后到底发生了什么我已经应用了它,当不止一个线程扩展文件时,它似乎工作得很好,但我不能确定它是否会导致任何数据丢失。
另外,假设两个线程同时调用ftruncate(2),第一个线程正在将文件扩展到2GB同时,第二个线程调用ftruncate(2)现在的疑问是第一个线程没有完成完整的任务,第二个线程也启动了ftruncate,那么会发生什么呢?
另外,如果这导致了任何麻烦,使用文件锁是一个明智的解决方案吗我正在编写的这段代码是一个库,因此在使用该库时,我不知道该库正在使用的进程的状态和配置在这种情况下是否有可能陷入僵局?

最佳答案

好吧,回答我的这个老问题,ftruncate(2)就我过去观察到的来说是原子的。
在评论中@BearAqua与macOS上的ftruncate(2)共享了POSIX shared memory功能不正常的链接,但这对常规文件无效。
尽管据我所知,我在任何地方都找不到ftruncate(2)是原子的或类似的原因,但就我所测试的来说,它是原子的。

07-26 03:28