-
线程使用Mutex
-
Mutex 用于线程同步,也可用进程间同步
using System; using System.Threading; namespace Pattern03 { class Program { static int thread_num = 5;//线程数 static AutoResetEvent autoReset = new AutoResetEvent(false);//标记线程池中执行情况 static Resource resource = new Resource(); static void Main(string[] args) { for (int i = 0; i < thread_num; i++) { ThreadPool.QueueUserWorkItem(AsyncMethod, i); } autoReset.WaitOne(); Console.WriteLine("all complete"); Console.ReadKey(); } static void AsyncMethod(object state) { resource.Access((int)state); if (Interlocked.Decrement(ref thread_num) == 0)//原子性操作变量 thread_num { Console.WriteLine($"线程id:thread_num{Thread.CurrentThread.ManagedThreadId} 调用完成"); autoReset.Set(); } } } class Resource { Mutex mutex = new Mutex(); public void Access(int Num) { mutex.WaitOne(); try { //这段代码是线程安全的 Console.WriteLine($"线程id:{Thread.CurrentThread.ManagedThreadId} start the Accesss method ,num:{Num}"); Thread.Sleep(1000);//模拟耗时操作 Console.WriteLine($"线程id:{Thread.CurrentThread.ManagedThreadId} stop the Acess method"); //这段代码是线程安全的 } finally { mutex.ReleaseMutex(); } } } }
-
线程学习(四)Mutex使用
最新推荐文章于 2024-08-28 15:59:43 发布