嗨,我想在两个进程之间使用文件系统作为锁,在Windows XP。 即给定一个文件名“file_lock”,一个进程通过尝试创build文件“file_lock”(如果它不存在的话)来获取锁。 如果已经存在,则无法获得locking。
即
FileStream fs=new FileStream("c:\file_lock,FileMode.CreateNew);
这会工作吗? 如果文件不存在primefaces文件是文件创build?
谢谢!
CreateFileMapping,MapViewOfFile,如何避免阻塞系统内存
“侦听”C / C ++中的文件更改(在Windows上)
文件deleteOnExit()函数保持参考指针打开,即使文件被删除后
复制文件安全权限
将包含stringtypes成员的logging保存到文件(Delphi,Windows)
文件在多个进程上
是的,它会工作。 但是,由于多种原因, 互斥量不如以下几种 :
当你的应用程序崩溃,系统清理互斥锁。 它不会为你删除你的文件。
为什么不必要地引入磁盘IO的开销和风险? (我不确定这是否可能,但是当文件打开时,用户可以重命名或移动它,对吧?)
这是更多的代码。
由于该问题已被标记为C#,这个答案不再适用,但我想离开它,以防将来对其他人有所帮助。
如果您使用Java,则可以使用java.nio.channels.FileLock 。
要使用它,请执行以下操作:
import java.io.RandomAccessFile; import java.nio.FileLock; ... RandomAccessFile raf = new RandomAccessFile(file,"rw"); FileLock lock = raf.getChannel().tryLock(0L,Long.MAX_VALUE,false); if (lock != null && lock.isValid()) { // You've acquired the lock! else { // You did not acquire the lock raf.close(); }
注意:这样可以防止来自其他进程的访问,而不是其他线程。 你需要使用自己的内部同步(锁定raf可能会工作)。
检查文件锁定/存在
这段代码可以帮助你检查锁。
public static bool isFileLocked(string filename) { if (!File.Exists(filename)) throw new FileNotFoundException("File not found!",filename); FileStream fs = null; try { fs = File.Open(filename,FileMode.Open,FileAccess.ReadWrite,FileShare.None); return false; } catch (IOException) { return true; } catch (Exception) { throw; } finally { if (fs != null) { fs.Close(); fs = null; } } }
HTH!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。