何为线程同步,其实就是数据串行操作,当前当前的资源在没有操作完毕之前,不允许其他的线程对同一资源进行操作。即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,互斥量就是其中一种。
在C#中使用互斥量 Mutex即可进行线程同步。
using System; using System.Threading; class MutexSample { private static Mutex mutex = null; //设为Static成员,是为了在整个程序生命周期内持有Mutex static void Main() { bool firstInstance; mutex = new Mutex(true, @"Global\MutexSampleApp", out firstInstance); try { if (!firstInstance) { Console.WriteLine ("已有实例运行,输入回车退出……"); Console.ReadLine(); return; } else { Console.WriteLine ("我们是第一个实例!"); for (int i=60; i > 0; --i) { Console.WriteLine (i); Thread.Sleep(1000); } } } finally { //只有第一个实例获得控制权,因此只有在这种情况下才需要ReleaseMutex,否则会引发异常。 if (firstInstance) { mutex.ReleaseMutex(); } mutex.Close(); mutex = null; } } }