返回信息流☆─────────────────────────────────────☆
aroma (aroma) 于 (Mon Nov 15 16:28:57 2010) 提到:
就是两个进程同时同时访问一个数据文件,例如csv文件,如果同时访问的话就会有错误。如何避免同时访问?
如果是两个线程的话可以用lock来解决,那么两个进程呢?
ps:具体情况这样的:完全独立的两个程序分别读取同一个文件夹中的csv文件,一个进程读完后就将这个文件删掉,所有的csv文件都只能被其中一个进程读取。我担心会不会一个进程读取过程中另一个进程也读取,这样的话就达不到我的要求了
ps:按照7楼版主的方法解决问题了,非常感谢。mutex进程间和线程间都可以使用,mutex也是继承了waithandle,作用都差不多。
☆─────────────────────────────────────☆
wardensky (wiwi) 于 (Mon Nov 15 18:38:00 2010) 提到:
用流加载?
我前一段时间同时加载一个图片的时候,用流加载解决了这个问题。你可以试一下。
【 在 aroma (aroma) 的大作中提到: 】
: 就是两个进程同时同时访问一个数据文件,例如csv文件,如果同时访问的话就会有错误。如何避免同时访问?
: 如果是两个线程的话可以用lock来解决,那么两个进程呢?
☆─────────────────────────────────────☆
wks (cloverprince) 于 (Mon Nov 15 19:09:29 2010) 提到:
我记得同时访问一个文件不会出错吧。一个读一个写甚至两个同时写也没问题吧。要不然,日志记录是如何实现的?
☆─────────────────────────────────────☆
ahomer (水上蓝心) 于 (Mon Nov 15 20:32:46 2010) 提到:
文本文件直接载入内存,分别读写应该没问题
我不知道lz采用什么机制读取,
1、进程级访问可以创建标记文件,即当一个进程开始读取则创建一个标识文件,
一个进程读取文件前先判断标记文件是否存在,如果存在就不读取。
做好程序出错、掉电等异常的处理。
可以在每次读取csv文件前check进程列表,查看要读取csv的两个进程是否存在,如果csv在进程列表中都不存在,可以把标记文件删除。
2、csv不大的话,直接copy一份吧。。。最后再merge
【 在 wks 的大作中提到: 】
: 我记得同时访问一个文件不会出错吧。一个读一个写甚至两个同时写也没问题吧。要不然,日志记录是如何实现的?
: --
: 免费贴代码:http://wksprivate.appspot.com/pastebin/
: ...................
☆─────────────────────────────────────☆
aroma (aroma) 于 (Mon Nov 15 20:47:03 2010) 提到:
现在按照第一个方法实现的,发上来就是想看看有没有更好的方法,比如像线程中的lock一样专门处理这个的方法。
感谢很有耐心的回答。
【 在 ahomer 的大作中提到: 】
: 文本文件直接载入内存,分别读写应该没问题
: 我不知道lz采用什么机制读取,
: 1、进程级访问可以创建标记文件,即当一个进程开始读取则创建一个标识文件,
: ...................
☆─────────────────────────────────────☆
aroma (aroma) 于 (Mon Nov 15 20:47:57 2010) 提到:
一个读一个写报错。微软的东西都只有第一个打开的进程拥有写的权利
【 在 wks 的大作中提到: 】
: 我记得同时访问一个文件不会出错吧。一个读一个写甚至两个同时写也没问题吧。要不然,日志记录是如何实现的?
: --
: 免费贴代码:http://wksprivate.appspot.com/pastebin/
: ...................
☆─────────────────────────────────────☆
ahomer (水上蓝心) 于 (Mon Nov 15 21:34:30 2010) 提到:
把读写csv文件的方法用mutex 封装起来,
利用guid创建 mutex,然后提供访问,也是一种方法
会比创建标记文件简单些。
这类似lock住文件的读写,如果根据guid创建的mutex已经存在
说明有进程在进行读写中,另外一个进程直接跳过
【 在 aroma (aroma) 的大作中提到: 】
: 现在按照第一个方法实现的,发上来就是想看看有没有更好的方法,比如像线程中的lock一样专门处理这个的方法。
: 感谢很有耐心的回答。
☆─────────────────────────────────────☆
ahomer (水上蓝心) 于 (Mon Nov 15 21:40:37 2010) 提到:
bool createdNew = true;
using (Mutex mutex = new Mutex(true, "2F7C55CF-23F9-4318-B50D-33F11EF53EA5", out createdNew))
{
if (createdNew)
{
//read or write csv file...
}
else
{
//break~
}
}
【 在 ahomer (水上蓝心) 的大作中提到: 】
: 把读写csv文件的方法用mutex 封装起来,
: 利用guid创建 mutex,然后提供访问,也是一种方法
: 会比创建标记文件简单些。
: ...................
☆─────────────────────────────────────☆
snoopyboy (patpat~) 于 (Mon Nov 15 22:15:45 2010) 提到:
顶~~
【 在 ahomer (水上蓝心) 的大作中提到: 】
: bool createdNew = true;
: using (Mutex mutex = new Mutex(true, "2F7C55CF-23F9-4318-B50D-33F11EF53EA5", out createdNew))
: {
: ...................
☆─────────────────────────────────────☆
ahomer (水上蓝心) 于 (Mon Nov 15 22:50:22 2010) 提到:
Mutex可以用于进程间同步,当用于进程间同步时,mutex 称为“命名 mutex”。必须给它指定一个名称,才能使两个应用程序访问同一个 mutex 对象。
使用GUID创建一个mutex的目的在于GUID是全球唯一的,可以标识多个进程的共享区域。
可以尝试用用命名mutex改你原先的程序,看看效果,也可以做个小实验先。
【 在 aroma 的大作中提到: 】
: 就是两个进程同时同时访问一个数据文件,例如csv文件,如果同时访问的话就会有错误。如何避免同时访问?
: 如果是两个线程的话可以用lock来解决,那么两个进程呢?
: ps:具体情况这样的:完全独立的两个程序分别读取同一个文件夹中的csv文件,一个进程读完后就将这个文件删掉,所有的csv文件都只能被其中一个进程读取。我担心会不会一个进程读取过程中另一个进程也读取,这样的话就达不到我的要求了
: ...................
☆─────────────────────────────────────☆
ahomer (水上蓝心) 于 (Mon Nov 15 22:51:26 2010) 提到:
visual studio/tool/create guid 可以创建一个唯一的guid
☆─────────────────────────────────────☆
ahomer (水上蓝心) 于 (Mon Nov 15 22:51:56 2010) 提到:
我的ip怎么变成 上海铁通来
汗。。
☆─────────────────────────────────────☆
snoopyboy (patpat~) 于 (Mon Nov 22 12:11:32 2010) 提到:
现在还是...IP库旧了
【 在 ahomer (水上蓝心) 的大作中提到: 】
: 我的ip怎么变成 上海铁通来
: 汗。。
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2577同步于 2010/12/13
dotNET机器人发帖
[合集] 【已解决】询问一个问题(更新)
snoopyboy
2010/12/13镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。