gentelwind
gentelwind
采纳率0%
2016-04-24 11:26 阅读 1.1k

C#程序访问公共文件次序怎么控制?

        有3个程序(A,B,C)需要不定时访问同一个文件,如果其中一个占用文件,则另外两个等待,直到占用被释放。在此等待过程中,比如,A先占用,B、C正好也要访问,而C比B要先等待,那么,我就需要A访问完之后让先等待的C程序先访问,B后访问。请问通过什么方法可以实现这样的控制?如果有多个程序呢?谢谢各位帮忙啦!
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2016-04-24 15:50

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

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

    点赞 评论 复制链接分享
  • gentelwind gentelwind 2016-04-25 12: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
    其次,一台电脑上可以建立互斥变量,那么多台电脑呢?仅有互斥是不行的了。不过好是很感谢你!

    点赞 评论 复制链接分享

相关推荐