首页 新闻 会员 周边

我的问题都很怪,可能是关于Mutex

0
悬赏园豆:15 [已解决问题] 解决于 2008-08-21 19:10
<P>我正在做一个采集程序,有一张架构图见此</P> <P><A href="http://www.cnblogs.com/lexus/default.html?page=2">http://www.cnblogs.com/lexus/default.html?page=2</A></P> <P>这里我遇到一个问题,当pc1,pc2根据采集的结果都想要写一个文件比如a.txt,pc1检测DAS上没有该文件就创建了一个开始写,而pc2同时也在检测发现也没有a.txt又创建了a.txt,由于pc2在后将覆盖掉pc1写入a.txt的内容,这时如何来处理使用mutex?</P> <P>问题就是,程序在各自的pc上运行,而储存是放在一块硬盘上,两台或多台机子可能重写一个文件,这个是不是涉及到分布式储存了,脑子好乱~~</P> <P>高手来说说</P>
lexus的主页 lexus | 初学一级 | 园豆:0
提问于:2008-08-13 14:15
< >
分享
最佳答案
0
采用 CreateNew 的方式创建文件,那么第二个进程创建文件必然失败,这时再重新打开文件读写。 读写时不要采用共享方式,而是采用独占方式读写,那么当一个进程在读或写时,另一个进程无法进行操作,让其进行等待,就可以了。 虽然不在一台机器,这种方式我觉得也应该是有效的,这也是最简单的方式。
eaglet | 专家六级 |园豆:17139 | 2008-08-14 07:36
其他回答(4)
0
可以这样设计,客户机pc要写文件之前必须向server申请写文件,server接收到申请,先看是不是有其他pc已经在写了,如果有,让pc等待,或者放弃;如果没有,则pc可以继续写文件,写完之后通知server写完毕。
玉开 | 园豆:8822 (大侠五级) | 2008-08-13 15:06
0
好像问题不只存在于这个地方,如果pc1正在操作这个文件,就算pc2检测正确了,也一样不可写,所以使用文件锁是一定的 我感觉比较好的办法是,不要让pc1/pc2直接写文件,而让所有采集PC把数据提交给server,然后由server统一写,这样可以解决文件被占用的问题,而且如果日后有什么需要对数据进行加工的需求,也可以在server上直接解决,不需要修改每一台PC,让PC只负责采集
丁学 | 园豆:18730 (专家六级) | 2008-08-13 15:28
0
我觉的似乎应该避免并发文件访问。 对于核心的数据: 比如:索引。并发访问比较多,我觉的使用数据库,不管是性能还是并发访问上都会容易控制的多。 对于非核心数据: 比如:采集的网页。应该有一定的方式进行管理。避免并发访问。 对于一些特别的内容,必须并发访问的: 比如:你硬要做多个PC通过类似断点续传的方式下载同一个文件。我觉的有三种方式,一种:数据分开按一定的格式保存,DAS上有一个专门的合并工具,定期合并这些数据。另两种:就是上面两位提到的方案。
Colin Han | 园豆:3041 (老鸟四级) | 2008-08-13 18:31
0
当数据存储遇到多个线程/用户竞争,需要保持原子性,事务隔离性的时候,最简单的办法就是使用数据库. 或者使用Windows Vista及更高版本支持的Transactional File System特性.
deerchao | 园豆:8367 (大侠五级) | 2008-08-13 21:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册