Yongq Wong

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

多进程访问同一文件问题

2009年4月7日

 问题:在多进程的程序中,每个进程都要访问一个文件读或写,这时会造成文件被其中一个进程占用,其它进程禁止访问它?

分析:多进程讯问同一个文件,容易造成共享文件安全问题,系统需要使用同步机制来确保一次只有一个线程使用该资源,故会抛出此类故障。

解决:可以采用锁系统资源方法来解决,方法介绍如下:

锁系统

构成

目的

跨进程?

速度

lock

确保只有一个线程访问某个资源或某段代码。

Mutex

确保只有一个线程访问某个资源或某段代码。
可被用于防止一个程序的多个实例同时运行

中等

Semaphore

确保不超过指定数目的线程访问某个资源或某段代码。

中等

在这里简要介绍Mutex方法。

Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。

1、首先,定义新的Mutex对象。

private static Mutex mut = new Mutex();  

2、在互斥的临界资源中使用WaitHandle..::.WaitOne 方法请求互斥体的所属权。

mut.WaitOne();    //拥有互斥体的线程可以在对WaitOne()的重复调用中请求相同的互斥体而不会阻止其执行。

.....//临界资源访问的程序片段

mut.ReleaseMutex();  //线程必须调用 ReleaseMutex() 方法同样多的次数以释放互斥体的所属权。

 

 

posted on 2009-04-07 14:17  Yongq wong  阅读(1112)  评论(0编辑  收藏  举报