多线程文件访问异常

yangliuxiaowu 2011-02-12 04:33:28
大哥大姐们好,小弟现在在做一个多线程程序,下面有一个helper性质的class:
FileAccessHelper

{
void OpenFile();

void updateFile();

void DeleteFile();

}
所有文件访问基本都是通过这个class中的方法来进行的,现在就有问题了,比如thread A通过OpenFile打开文件的过程中,thread B也在这个时候updateFile()访问同一个文件,就会出现file is being used by another process exception。
现有的方法:
1) 用lock锁住: 不行! 因为前面说了,这个helper class会被所有的thread使用,要是lock住一个方法的话,所有的都要wait,而我只要是lock同一个文件就行了。
2) 用下面这种方法,可以降低出exception的概率,但是还是会有,而且性能也会很受影响。
For(i=10)

{
try {// 文件访问}

catch{thread.sleep(1000);}

}

大家有啥好点子不?多谢谢了吖。
...全文
88 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangliuxiaowu 2011-03-02
  • 打赏
  • 举报
回复
多谢各位。
孟子E章 2011-02-12
  • 打赏
  • 举报
回复
把文件的内容放在数据库中,操作数据库,需要的文件的时候再生成文件。
wuyq11 2011-02-12
  • 打赏
  • 举报
回复
采用阻塞读,或者阻塞写
独占方式操作文件lock
创建一个写入队列。启动线程
考虑CPU,读文件和写文件,多线程不一定能更快


sprc_lcl 2011-02-12
  • 打赏
  • 举报
回复
//仅参考
private static List<string> lockFiles = new List<string>();
public void OpenFile()
{
string fileName = "...";
while (lockFiles.Contains(fileName))
{
Thread.Sleep(100);
}

lockFiles.Add(fileName);
//do open..
lockFiles.Remove(fileName);
}
public void updateFile()
{
string fileName = "...";
while (lockFiles.Contains(fileName))
{
Thread.Sleep(100);
}

lockFiles.Add(fileName);
//do update..
lockFiles.Remove(fileName);
}

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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