多个进程访问同一文件,如何做到互斥访问呢?

gaogar2008 2012-06-29 04:05:46
我有两个进程需要访问同一个文件,其中两个进程都有可能会对文件进行读写,如果当某一个进程操作文件的过程中,另一个进程又同时需要操作这个文件,就会出现文件正在被另一进程访问的异常。有没有方法可以让一个进程在访问时,令一个进程等候第一个进程访问结束后在进行访问呢?注意,是进程,不是线程。谢谢大家!
...全文
825 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
silence1214 2012-07-02
  • 打赏
  • 举报
回复
在访问文件的入口处加锁
  • 打赏
  • 举报
回复
那很容易让你的多进程彻底死锁。而且性能远不如网关机制。
lizhibin11 2012-06-30
  • 打赏
  • 举报
回复

Mutex mu = new Mutex(false, "filewrite");
int x = 0;
while (x < 4)
{
mu.WaitOne();
Console.WriteLine("enter");
Thread.Sleep(5000);
Console.WriteLine("exit");
mu.ReleaseMutex();
Thread.Sleep(1000);
x++;
}

两个进程都调用命名Mutex。上面的代码生成exe后可以打开两个进程测试一下。
  • 打赏
  • 举报
回复
最好的办法是文件只归属一个网关进程所有,然后其它进程控制进程进行tcp(或者其它,例如命名管道)通讯来操作。这个时候,你设计的不是文件,而是业务服务。
  • 打赏
  • 举报
回复
没有办法预先“等待”。你可以在捕获这个确定的exception之后,让进程Sleep一个短暂的时间,然后重新循环读取这个文件。控制总的循环次数,例如10次。控制Sleep时间,例如先是50毫秒,第二次是100毫秒,第三次是200毫秒...
gaogar2008 2012-06-30
  • 打赏
  • 举报
回复
顶起!
gaogar2008 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
使用Lock关键字,详情参见MSDN
[/Quote]
Lock在进程间可以使用吗?
平安祥瑞wh 2012-06-29
  • 打赏
  • 举报
回复
使用Lock关键字,详情参见MSDN
haidaoqi1234 2012-06-29
  • 打赏
  • 举报
回复
进程间通信,一个进程操作完成后通知另外一个进程
cnfixit 2012-06-29
  • 打赏
  • 举报
回复
哦,看错,除非两个程序都是你写的,只读打开,异常捕获稍后再试
cnfixit 2012-06-29
  • 打赏
  • 举报
回复
只读打开呗

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧