我有一个在Linux上运行的应用程序,我发现自己需要windows (!)。
问题是,每1000次左右,我都会遇到并发问题,这些问题与文件的并发读/写一致。我相当确定Windows下的文件锁定将禁止此行为,但我没有足够快的windows框来检查。
有太多的文件访问(太多的数据)期望strace可靠地工作--绝对的输出量可能也会改变这个问题。每次在不同的文件上也会发生这种情况。理想情况下,我希望更改/重新配置linux文件系统,使其对wrt并发访问有更多的限制(就像在fail-fast中一样)。
有没有什么工具/设置可以用来实现这一点?
发布于 2010-03-27 02:13:35
嗯。在类似Posix的系统上,对文件的并发访问是完全合法的,因此不存在与之相关的“故障”模式。在Linux上不能使用文件锁定有什么原因吗?从你的描述中很难看出实际问题是什么(1000倍于什么?)但听起来传统的flock()或lockf()系统调用可能就是您要找的。
发布于 2010-03-27 02:26:56
出于某种原因,我以为你在使用C++。如果您是这样的话,以下内容将适用。
如果您正在使用多线程和fstream IO和自定义的streambufs,或者您禁用了sync_with_stdio,那么是的,Windows的行为将与C++上的iostream不同。
我在我自己的一个项目中遇到了这个问题。
Windows在其iostream哨兵中定义了一个互斥锁。Linux不需要。Linux似乎确实在它的C stdio函数中有锁定功能,所以通常情况下这是可行的。
然而,我定义了一个定制的debug streambuf,它没有通过stdio,并且在Linux中得到了各种各样的损坏。
我使用了一个互斥锁来解决这个问题,如果操作系统是Windows,这个互斥锁就会被预处理出来。
https://stackoverflow.com/questions/2525184
复制相似问题