人如果没有梦想那和咸鱼有什么区别,即使是做咸鱼也要做最咸的那一条

—— Wy

C#多进程多线程同步类Mutex

Mutex 类


命名空间:  System.Threading


程序集:  System.Threading.dll, mscorlib.dll, netstandard.dll


一个同步基元,也可用于进程间同步。 

 

Mutex 类可帮助我们实现多进程的情况下实现同步


测试代码如下


static void Main(string[] args)
        {
            TaskTest();
        }

        const string MutexName = "CSharpThreadingCookbook";

        static void TaskTest()
        {
            while (true)
            {
                // 使用using 及时释放资源
                using (var m = new Mutex(true, MutexName))
                {
                    if (!m.WaitOne(TimeSpan.FromSeconds(5), false))
                    {
                        Console.WriteLine("已经有实例正在运行!");
                    }
                    else
                    {

                        Console.WriteLine("运行中...");

                        // 演示递归获取锁
                        Recursion();

                        Console.ReadLine();
                        m.ReleaseMutex();
                        break;
                    }
                }
            }

            Console.ReadLine();
        }

        static void Recursion()
        {
            using (var m = new Mutex(false, MutexName))
            {
                if (!m.WaitOne(TimeSpan.FromSeconds(2), false))
                {
                    // 因为Mutex支持递归获取锁 所以永远不会执行到这里
                    Console.WriteLine("递归获取锁失败!");
                }
                else
                {
                    Console.WriteLine("递归获取锁成功!");
                }
            }
        }


要实现多进程同步,必须给Mutex 一个相同的名称,如果没有给名称,是无法实现多进程的,要实现多线程同步也需要实现相同的Mutex对象,给了名称旧可以像上面一样,哪里需要就直接实例化一个,依然可以保证线程同步!!!

 







评论

用户默认头像
发表我的评论
取消评论
看不清,点击刷新验证码