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 谢谢!首先,通过互斥的话两个可以,多了,也会乱的。代码如下
一年多之前 回复
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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!