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

  • 相关阅读:
    Codeforces Round #436 (Div. 2)
    【bzoj1090】 [SCOI2003]字符串折叠
    【并查集】食物链(带权并查集)
    【图论】二分图
    【图论】关押罪犯
    关于图论的若干巴拉巴拉
    一系列的入门and一堆吐槽
    【分块】八
    9-30刷题记录
    bzoj5055
  • 原文地址:https://www.cnblogs.com/sql4me/p/1430921.html
Copyright © 2011-2022 走看看