多线程如何访问硬盘中的图片文件? 程序中有两个线程tA和tB,tA会在随机的时间去读取硬盘的图片文件p,而tB则会在随机的时间去改写硬盘的图片文件p。可以采取哪些方法去避免线程tA和tB同时访问文件p呢?谢谢指点! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以设定一个规则,如A读取a-m开头的文件,b读取其他的文件或者先列出所有文件的集合,再进行分配 应该像锁的概念,就是当tA在给p做操作的时候就锁住,不让tB去访问,同理tB也是如此。 谢谢孟老师的回复,程序逻辑中,不好设置某个规则去避免。能否使用“尝试”(try)的方式,如B“尝试”着去改写文件,如果发现文件已被A占用,则等待一定的时间后,再去尝试。我现在的代码,调试中,一旦被占用,程序就报错并退出了。不知道c#有没有这样的方法?感谢指点。 你可以定义一个正在访问的文件名变量如果而tB则会在随机的时间去改写硬盘的图片文件p与正在访问的文件与变量相等,就跳过它去访问修下一个! 看看 多线程的东西,用lock,也有好几个类用来实现同步的 如果你通过 File 对象去访问文件。而且不涉及自身变量的同步问题。那么锁是操作系统已经完成的了。一个文件在打开的时候,就被赋予权限控制,包括共享读、只读、只写等等。如果你试图访问一个已经锁定的文件,会收到一个拒绝访问的IO异常。 “试图访问一个已经锁定的文件,会收到一个拒绝访问的IO异常”,我的程序是直接终止了。是使用try{}catch{}的方法去获取这个异常,而不退出吗? 可以try{}catch (IOException ex){ ...}catch (Exception ex){ 其他错误} 本帖最后由 caozhy 于 2011-09-22 21:07:09 编辑 再问caozhy大师一个相关的问题:try catch是否会CPU的运算量比较大,也就是比较耗时的? 但是你一定要写一个while (true){ try { } catch { }}那我也没办法。 谢谢caozhy大师及楼上各位的帮助!明天我再重新写过代码,今晚的加班就到此了。 c# winform 中键盘操作选中combobox中的内容 急求用C#代码写xaml标记语言 C#2008中怎样利用.net的安装部署制作安装文件 winform中使用webbrowser打开内嵌flvplayer-progressive.swf的html问题 错误 10 当前上下文中不存在名称“Label1” WebService安全性问题,要死人啦。 北京盛安德科技发展有限公司 有谁了解这个公司呢? 建立视图 参加竞赛 项目没有获奖 郁闷 散分100 SQL转Oracle问题 谢谢了! C# 获取剪贴板clipBoard文字内容
或者先列出所有文件的集合,再进行分配
不知道c#有没有这样的方法?感谢指点。
如果而tB则会在随机的时间去改写硬盘的图片文件p与正在访问的文件与变量相等,就跳过它去访问修下一个!
{}
catch (IOException ex)
{
...
}
catch (Exception ex)
{
其他错误
}
{
try { } catch { }
}那我也没办法。