zoukankan      html  css  js  c++  java
  • C#多线程的用法6-线程间的协作Mutex

    Mutex在线程协作的过程中起互斥的左右,效果与线程锁类似。

    /// <summary>
            /// 多线程协作-Mutex
            /// </summary>
            private static void MultiThreadSynergicWithMutex()
            {
               
                Mutex mutex = new Mutex(true);
                
                Thread thread1 = new Thread(() =>
                {
                    mutex.WaitOne();
                    for (var i = 0; i < 5; i++)
                    {
                        Console.WriteLine(i);
                    }
                    mutex.ReleaseMutex();
                });
                Thread thread2 = new Thread(() =>
                {
                    mutex.WaitOne();
                    for (var i = 5; i < 10; i++)
                    {
                        Console.WriteLine(i);
                    }
                    mutex.ReleaseMutex();
                });
    
                thread1.Start();
                thread2.Start();
                mutex.ReleaseMutex();
            }
    

    说明:

    1、initiallyOwned表示创建mutex的线程是否拥有该互斥体。true表示创建线程拥有互斥锁,只有在创建线程中调用ReleaseMutex释放后,其他等待线程才能参与抢夺互斥体的活动。false表示互斥锁体于与空闲状态,其他等待互斥锁的线程立即参与到抢夺互斥锁的活动中去。

    2、在上面程序中创建mutex时使用true参数,故在启动其他线程后必须执行mutex.ReleaseMutex(),如果不释放mutex,则其他线程将一直等待下去。

    3、mutex.WaitOne()与mutex.ReleaseMutex()要像 { } 一样配对使用,否则将出现 "由于出现被放弃的 mutex,等待过程结束" 的异常

    4、mutex与monitor相比,没有暂时释放的功能;因此mutex一经释放,原释放资源的线程也将重新参与新一轮对mutex的争夺过程。

    5、mutex除了可用于线程同步外还可用于进程间同步,这些知识有待你去发掘........

  • 相关阅读:
    Python通过多线程实现 `异步`
    Linux(六) 处理用户输入
    Linux(五) 更多结构化命令
    Linux(四) 使用结构化命令
    Linux(三) 科学计算
    Linux(二) Shell脚本
    python 登陆接口
    学习的小建议
    干货
    ThinkPhp5 自定义异常处理类
  • 原文地址:https://www.cnblogs.com/dw039/p/7402356.html
Copyright © 2011-2022 走看看