zoukankan      html  css  js  c++  java
  • 多进程访问同一文件问题

    多进程访问同一文件问题

    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() 方法同样多的次数以释放互斥体的所属权。

  • 相关阅读:
    项目管理原则
    开发规范
    讲故事-如何才算确认了需求
    关于概要设计
    jQuery操作
    IE8,IE9,IE10绿色版,以及ColorPix
    机务UI设计小节
    Abstract Factory
    Flyweight
    Chain of Responsibility
  • 原文地址:https://www.cnblogs.com/sql4me/p/1430921.html
Copyright © 2011-2022 走看看