C# 线程同步_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C# 线程同步

C# 线程同步

 2013/10/14 3:31:21  kernel_main  博客园  我要评论(0)
  • 摘要:1usingSystem;2usingSystem.Threading;3usingSystem.Text;4usingSystem.Threading.Tasks;56//多线程调试:2013.10.087//转自http://www.cnblogs.com/yank/p/3227324.html8namespaceThreadExample9{10classSpinLockSample11{12publicstaticvoidTest()13
  • 标签:C# 线程 同步
  1 using System;
  2 using System.Threading;
  3 using System.Text;
  4 using System.Threading.Tasks;
  5 
  6 //线程调试: 2013.10.08
  7 //转自 http://www.cnblogs.com/yank/p/3227324.html
  8 namespace ThreadExample
  9 {
 10     class SpinLockSample
 11     {
 12         public static void Test()
 13         {
 14             SpinLock sLock = new SpinLock();
 15             StringBuilder sb = new StringBuilder();
 16             Action action = () =>
 17                 {
 18                     bool gotLock = false;
 19                     for (int i = 0; i < 5; i++)
 20                     {
 21                         gotLock = false;
 22                         try
 23                         {
 24                             sLock.Enter(ref gotLock);
 25                             sb.Append(i.ToString());
 26                         }
 27                         catch (System.Exception ex)
 28                         {
 29 
 30                         }
 31                         finally
 32                         {
 33                             if (gotLock)
 34                             {
 35                                 sLock.Exit();
 36                             }
 37                         }
 38                     }
 39                 };
 40             //多线程调用action
 41             Parallel.Invoke(action,action,action);
 42             Console.WriteLine("Ouput {0}",sb.ToString());
 43         }
 44     }
 45 
 46     class App
 47     {
 48         private static object UsingPrinterLocker = new object();
 49         private static Mutex mutex = new Mutex();
 50 
 51         public static void Main()
 52         {
 53             SpinLockSample.Test();
 54             //TestPrint();
 55         }
 56 
 57         public static void TestPrint()
 58         {
 59             Thread thread;
 60             Random random = new Random();
 61 
 62             for (int i = 0; i < 10;i++ )
 63             {
 64                 thread = new Thread(MyThreadProc);
 65                 thread.Name = string.Format("Thread {0}", i);
 66                 Thread.Sleep(random.Next(3));
 67                 thread.Start();
 68             }
 69         }
 70 
 71         public static void MyThreadProc()
 72         {
 73             //UserPrinter();
 74             //UsePrinterWithMutex();
 75             UsePrinterWithMoniter();
 76         }
 77 
 78         public static void UsePrinterWithMutex()
 79         {
 80             mutex.WaitOne();
 81             try
 82             {
 83                 Console.WriteLine("{0} acquired thd lock", Thread.CurrentThread.Name);
 84                 Thread.Sleep(2000);
 85                 Console.WriteLine("{0} exiting lock.", Thread.CurrentThread.Name);
 86             }
 87             catch (System.Exception ex)
 88             {
 89                 
 90             }
 91             finally
 92             {
 93                 mutex.ReleaseMutex();
 94             }
 95         }
 96 
 97         public static void UsePrinterWithMoniter()
 98         {
 99             System.Threading.Monitor.Enter(UsingPrinterLocker);
100             try
101             {
102                 Console.WriteLine("{0} acquired the lock", Thread.CurrentThread.Name);
103                 Thread.Sleep(500);
104                 Console.WriteLine("{0} exit lock", Thread.CurrentThread.Name);
105             }
106             catch (System.Exception ex)
107             {
108                 
109             }
110             finally
111             {
112                 System.Threading.Monitor.Exit(UsingPrinterLocker);
113             }
114         }
115 
116         public static void UserPrinter()
117         {
118             lock (UsingPrinterLocker)
119             {
120                 Console.WriteLine("{0} acquired the lock", Thread.CurrentThread.Name);
121                 Thread.Sleep(500);
122                 Console.WriteLine("{0} exiting lock.", Thread.CurrentThread.Name);
123             }
124         }
125     }
126 }

 

发表评论
用户名: 匿名