C#多线程的用法6-线程间的协作Mutex_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#多线程的用法6-线程间的协作Mutex

C#多线程的用法6-线程间的协作Mutex

 2017/8/21 10:09:13  DW039  程序员俱乐部  我要评论(0)
  • 摘要:Mutex在线程协作的过程中起互斥的左右,效果与线程锁类似。///<summary>///多线程协作-Mutex///</summary>privatestaticvoidMultiThreadSynergicWithMutex(){Mutexmutex=newMutex(true);Threadthread1=newThread(()=>{mutex.WaitOne();for(vari=0;i<5;i++){Console.WriteLine(i);
  • 标签:C# 用法 多线程 线程

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

class="brush:csharp;gutter:true;">/// <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除了可用于线程同步外还可用于进程间同步,这些知识有待你去发掘........

发表评论
用户名: 匿名