用Mutex实现多进程对文件的读写互斥,该Mutex该如何定义?

问题描述

准备写个Lib,实现对文件的读写互斥,用什么互斥机制比较好啊,我准备用Mutex,但怎么定义它呢,在程序里直接create的话,每当其他进程访问到这段代码时,再执行createmutex不会有影响么,求教

解决方案

解决方案二:
看看MSDN上的例子吧:usingSystem;usingSystem.Threading;classTest{//CreateanewMutex.Thecreatingthreaddoesnotownthe//Mutex.privatestaticMutexmut=newMutex();privateconstintnumIterations=1;privateconstintnumThreads=3;staticvoidMain(){//Createthethreadsthatwillusetheprotectedresource.for(inti=0;i<numThreads;i++){ThreadmyThread=newThread(newThreadStart(MyThreadProc));myThread.Name=String.Format("Thread{0}",i+1);myThread.Start();}//Themainthreadexits,buttheapplicationcontinuesto//rununtilallforegroundthreadshaveexited.}privatestaticvoidMyThreadProc(){for(inti=0;i<numIterations;i++){UseResource();}}//Thismethodrepresentsaresourcethatmustbesynchronized//sothatonlyonethreadatatimecanenter.privatestaticvoidUseResource(){//Waituntilitissafetoenter.mut.WaitOne();Console.WriteLine("{0}hasenteredtheprotectedarea",Thread.CurrentThread.Name);//Placecodetoaccessnon-reentrantresourceshere.//Simulatesomework.Thread.Sleep(500);Console.WriteLine("{0}isleavingtheprotectedarearn",Thread.CurrentThread.Name);//ReleasetheMutex.mut.ReleaseMutex();}}

解决方案三:
何必用Mutex呢?FileStream本身就支持读写互斥:FileStreamfs=newFileStream("...",FileMode.Open,FileAccess.Read,FileShare.Read);StreamReadersr=newStreamReader(fs);//...你用Mutex控制,那些不用Mutex的进程一样可以绕过你的控制。
解决方案四:
我想让多个进程调用这个lib,进行文件的读写互斥这样的话FileStream就不行了吧?
解决方案五:
引用3楼rambooo的回复:

我想让多个进程调用这个lib,进行文件的读写互斥这样的话FileStream就不行了吧?

Whynot?Didyoutryit?MSDN

FileShare.None:Declinessharingofthecurrentfile.Anyrequesttoopenthefile(bythisprocessoranotherprocess)willfailuntilthefileisclosed.

时间: 2024-10-23 15:58:12

用Mutex实现多进程对文件的读写互斥,该Mutex该如何定义?的相关文章

Java 中对文件的读写操作之比较

比较 Java 中对文件的读写操作之比较 作者:Jeru Liu日期:November 29,2000版本:1.0 Java 对文件进行读写操作的例子很多,让初学者感到十分困惑,我觉得有必要将各种方法进行一次分析,归类,理清不同方法之间的异同点. 一.在 JDK 1.0 中,通常是用 InputStream & OutputStream 这两个基类来进行读写操作的.InputStream 中的 FileInputStream 类似一个文件句柄,通过它来对文件进行操作,类似的,在 OutputSt

利用Activer server explorer可对文件进行读写访问

active|server|访问    漏洞描述: chinaasp的Activer server explorer可以很方便的对本地文件在线查看服务器上的目录 在线查看文件的名称.大小.类型.修改时间,在线编辑纯文本文件,如.txt..htm..asp..pl..cgi等等,直接执行服务器上的文件. Activer server explorer要求填写相对路径或者绝对路径,但是假如:有一个攻击者把Activer server explorer上传到目标服务器上的某个目录,并且这个目录支持AS

Java中对文件的读写操作之比较

比较 Java 中对文件的读写操作之比较 Java 对文件进行读写操作的例子很多,让初学者感到十分困惑,我觉得有必要将各种方法进行 一次分析,归类,理清不同方法之间的异同点. 一.在 JDK 1.0 中,通常是用 InputStream & OutputStream 这两个基类来进行读写操作的. InputStream 中的 FileInputStream 类似一个文件句柄,通过它来对文件进行操作,类似的,在 OutputStream 中我们有 FileOutputStream 这个对象. 用F

CorelDraw提示“试图越过其尾端对一未命名文件进行读写”

<CorelDraw疑难杂症速查手册>收集了作者木平与各位平面设计同仁相互探讨提出的问题以及百度CD吧的提问,结合实际操作和工作中遇到的问题整理而成.其中有些问题参考了吧中好友和网络上同道中人的回答,对于一些不清楚或有疑问的问题作者都亲自用CorelDraw 9和CorelDraw X3分别验证了操作性与真实性. 本教程为分期连载教程,欢迎大家持续关注. 问:CorelDraw提示"试图越过其尾端对一未命名文件进行读写"是怎么回事? 打开CorelDraw后,出现这样一句话

Android手机内存中文件的读写方法小结

  Android手机内存中文件的读写方法小结         这篇文章主要介绍了Android手机内存中文件的读写方法,实例总结了Android针对文件读写操作的相关技巧,非常具有实用价值,需要的朋友可以参考: 如何对手机内存中的文件数据进行读写呢? Context提供了领个方法来打开该应用程序的数据文件夹中的文件I/O流,具体如下: ? 1 FileInputStream openFileInput(String name) 打开应用程序的数据文件夹下的name文件对应的数据流 ? 1 Fi

介绍asp.net 操作INI文件的读写

 这篇文章主要介绍了asp.net 操作INI文件的读写,读写操作本地ini配置文件的方法,需要的朋友可以参考下  代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebCon

c++-文件的读写,会将类对象的数据成员写入文件中。能将文件中的信息读入类对象的对应属性中。

问题描述 文件的读写,会将类对象的数据成员写入文件中.能将文件中的信息读入类对象的对应属性中. 情况一:无get,set,无<< >>重载函数的情况下如何将类对象的各个数据成员写入某个文件中(提示:可以在print函数中写代码). 情况二:当程序包含get,set函数而无<< >>重载函数时,如何将类对象的数据成员写入文件中. 情况三:当程序包含<< >>重载函数时,如何将类对象的数据成员写入文件中. 解决方案 大神在哪里,求,求大神

c++-关于C++文件的读写read和write问题!

问题描述 关于C++文件的读写read和write问题! 第一个:这样写读出结果会对,但是有时候也会出错.换成中文的有时也会出错. #include #include #include using namespace std; class People { private: struct { string name; string weight; string tall; string sex; }people; public: People(){} People(string name, st

语言 指针-第一次写项目,不知道怎么实现。怎么实现数据文件的读写

问题描述 第一次写项目,不知道怎么实现.怎么实现数据文件的读写 软件三层架构 将用例图确定的函数 按 架构放在 不同的位置协同工作 界面切换 要点:所有界面是平等 实施:(1)所有 XXXXUI()的返回值 设置为 int (2)给 上述界面函数 编号通过界面编号进行 界面切换登录界面int LoginUI(){ XXXXXXXXXX if 成功 return 1; // 主界面else 失败 return 0; // 退出 } int main(){ int choice = 101; whi