如何找到文件系统并发问题?

时间:2010-03-26 17:09:15

标签: linux file-io

我在Linux上运行了一个应用程序,我发现自己想要Windows(!)。

问题是每1000次左右我遇到与并发读/写文件一致的并发问题。我很确定在Windows下文件锁定会禁止这种行为,但是我没有足够快的窗口框来检查。

文件访问过多(数据太多)以至于期望strace可靠地工作 - 输出的绝对数量也可能改变问题。它每次都发生在不同的文件上。理想情况下,我想更改/重新配置linux文件系统,使其更具限制性(如在故障快速中)并发访问。

我可以使用任何工具/设置来实现这一目标吗?

2 个答案:

答案 0 :(得分:2)

嗯。并发访问文件在类似Posix的系统上是完全合法的,因此没有与之相关的“失败”模式。有没有理由你不能在Linux上使用文件锁定?从你的描述中很难说实际问题是什么(1000倍的是什么?)但听起来像传统的flock()或lockf()系统调用可能就是你要找的东西。

答案 1 :(得分:1)

出于某种原因,我以为你在使用C ++。以下情况适用于您。

如果你正在使用多线程和fstream IO和自定义streambufs,或者你禁用了sync_with_stdio,那么是的,C ++ iostreams的行为与Windows上的iostreams不同。

我在自己的一个项目中碰到了这个。

Windows在其iostream哨兵中定义了一个互斥锁。 Linux没有。 Linux确实似乎锁定了它的C stdio函数,所以通常无论如何都会有效。

但是,我定义了一个自定义的调试streambuf,它没有通过stdio并在Linux中遭受各种破坏。

如果操作系统是Windows,我使用预处理的互斥锁来解决这个问题。