多进程访问同一文件问题
2009年4月7日
问题:在多进程的程序中,每个进程都要访问一个文件读或写,这时会造成文件被其中一个进程占用,其它进程禁止访问它?
分析:多进程讯问同一个文件,容易造成共享文件安全问题,系统需要使用同步机制来确保一次只有一个线程使用该资源,故会抛出此类故障。
解决:可以采用锁系统资源方法来解决,方法介绍如下:
构成 |
目的 |
跨进程? |
速度 |
确保只有一个线程访问某个资源或某段代码。 |
否 |
快 | |
确保只有一个线程访问某个资源或某段代码。 |
中等 | ||
确保不超过指定数目的线程访问某个资源或某段代码。 |
是 |
中等 |
在这里简要介绍Mutex方法。
Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。
1、首先,定义新的Mutex对象。
private static Mutex mut = new Mutex();
2、在互斥的临界资源中使用WaitHandle..::.WaitOne 方法请求互斥体的所属权。
mut.WaitOne(); //拥有互斥体的线程可以在对WaitOne()的重复调用中请求相同的互斥体而不会阻止其执行。
.....//临界资源访问的程序片段
mut.ReleaseMutex(); //线程必须调用 ReleaseMutex() 方法同样多的次数以释放互斥体的所属权。