2 gentelwind gentelwind 于 2016.04.24 19:26 提问

C#程序访问公共文件次序怎么控制?
        有3个程序(A,B,C)需要不定时访问同一个文件,如果其中一个占用文件,则另外两个等待,直到占用被释放。在此等待过程中,比如,A先占用,B、C正好也要访问,而C比B要先等待,那么,我就需要A访问完之后让先等待的C程序先访问,B后访问。请问通过什么方法可以实现这样的控制?如果有多个程序呢?谢谢各位帮忙啦!

2个回答

caozhy
caozhy   Ds   Rxr 2016.04.24 23:50

程序之间通过互斥量自己协调

http://blog.csdn.net/jiaao/article/details/2458237

gentelwind
gentelwind 谢谢!首先,通过互斥的话两个可以,多了,也会乱的。代码如下
大约 2 年之前 回复
gentelwind
gentelwind   2016.04.25 20:18

谢谢!首先,通过互斥的话两个可以,多了,也会乱的。代码如下 :
public class MutexTest
{
private int index = 0;
public MutexTest(int ind) { index = ind; }
public void DoTest()
{
Mutex mutex = new Mutex(false, "MutexTest");
try
{
mutex.WaitOne(10000);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}

        Console.WriteLine(string.Format("my index is {0}...", index));

        for (int i = 5; i > 0; i--)
        {
            Console.WriteLine(i);
            Thread.Sleep(1000);
        }

        mutex.ReleaseMutex();
        mutex.Close();
        mutex = null;
    }
}
    class Program
{
    static void Main(string[] args)
    {
        MutexTest mt1 = new MutexTest(1);
        Thread th1 = new Thread(new ThreadStart(mt1.DoTest));

        MutexTest mt2 = new MutexTest(2);
        Thread th2 = new Thread(new ThreadStart(mt2.DoTest));

        MutexTest mt3 = new MutexTest(3);
        Thread th3 = new Thread(new ThreadStart(mt3.DoTest));

        MutexTest mt4 = new MutexTest(4);
        Thread th4 = new Thread(new ThreadStart(mt4.DoTest));

        th4.Start();
        Thread.Sleep(10);
        th2.Start();
        Thread.Sleep(10);
        th1.Start();
        Thread.Sleep(10);
        th3.Start();
        Thread.Sleep(10);

        Console.Read();
    }
}
    代码运行如下:

my index is 4...
5
4
3
2
1
my index is 1...
5
4
3
2
1
my index is 2...
5
my index is 3...
5
4
4
3
3
2
2
1
1
其次,一台电脑上可以建立互斥变量,那么多台电脑呢?仅有互斥是不行的了。不过好是很感谢你!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c#用账号密码访问公共盘,pdf打印文档
1. 访问公共盘,可以用c#操作net use命令。(本人试验过,貌似只有这种方式可以用) 适用环境:当要访问公司别的部门的公共盘,又没有权限的时候。需要知道公共盘的IP,别的部门的一个账号密码。 public string ConnectLan(string p_Path, string p_UserName, string p_PassWord) {
C#属性详解(c# 通过公共属性访问私有成员 优点)
C#属性是域的扩展(即通常说的成员变量或字段等)它配合C#中的域(字段)使用,使之构造一个安全的应用程序,为什么说通过属性来替代域会提高应用程序的安全呢?     原因就在于C#属性通过访问器(Accessors)用进行数据访问.所以C#的属性可以设置为只读或只写. 而字段却没有这样的功能(只可设置只读).我们都知道在程序中有时我们是不允许用户修改一些属性的,比如地球是圆的。原则上我们是不能
C#数据库公共访问类----公共的数据库访问访问类
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Collections; namespace DotNet.Utilities {     ///     /// 数据库的通用访问代码 苏飞
C#调用工控机dll文件,实现对IO的控制
    本文旨在记录,C#通过调用外部DLL文件实现对Nuvo3120工控机IO口的控制。    前期,了解了C++中.c\.h\.lib文件的区别,以及用这些文件生成DLL的方法,后面通过厂家直接找到了WDT_DIO64.dll文件,工作重点由代码转化变为C#调用dll文件,实现函数调用的问题。    关于C#调用dll的方法。    首先尝试了在解决方案资源管理器里,右键“引用”在弹出菜单中“...
C#操作数据库的常用公共方法!
即便是一个小型的C#+数据库的项目(本文以SQL SERVER为例,其他数据库类似),也需要多种对数据库的操作。有时候编代码的时候,想到哪写到哪确实可以实现具体的功能,但从整个框架体系上来看,代码的冗余以及不规范,很有可能导致代码运行的效率,对后期扩展项目的规模也是有弊而无利。以前我犯了很都这种错误,以后坚决不犯了。     好了,言归正传了。经常操作数据库的步骤无非就是连接数据库,执行SQL语
C#如何取出非公共成员
简述: 一般而言,非公共成员是受保护的,不能被外部访问的,这些都是基于安全性考虑。可是有时,我们很想取到非公共成员的某个对象。那我们就得用到两个方法: GetType().GetField(); GetType().GetProperty(); GetField()用来获取字段,GetProperty()用来获取属性。     示例: 如图,我要获取_row和Row的值。
公共类实现c#项目与mysql的连接
使用得是vs2017版本 1.建立公共的类: 新建c#项目->类库; 如项目需要使用类库,则在项目的“引用”中,引用该类库,并using类库的命名空间。使用类的方法,实例化类就行了。 2.类中关于mysql数据库连接的方法如下: ①解决方案资源管理器中右键引用->添加引用->扩展->选择MySql.Data 或者在解决方案资源管理器中右键引用->添加引用->浏览,浏览路径为安装mysq
c# 因其保护级别而不可访问。只能处理公共类型。
在实现C#导出List数据到xml文件[附源码]时遇到错误:因其保护级别而不可访问。只能处理公共类型。产生错误的代码行:XmlSerializer xmlSerializer = new XmlSerializer(typeof(List)); 错误原因:以下代码中类定义为:class UserModel没有添加public访问修饰符 /// /// 用户实体类 ///
Winform应用程序加入UAC(User Account Control)用户账户控制
右键项目——>添加——>新建项——>选择应用程序清单文件 新增成功后,文件内容如下: <!-- UAC 清单选项 如果要更改 Windows 用户帐户控制级别,请用以下节点之一替换 requestedExecutionLevel 节点。
微信小程序公共组件的引用与控制
思路: 1.在组件wxml文件里实现布局、数据绑定、事件绑定; 2.组件js文件里定义事件,并将文件所有内容作为一个对象export出去; 3.在引用的文件引入组件(方式有两种,一个是用include引入,一个是import引入,详情: https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/import.html