System.Threading.Monitor的使用

 1 class Target
 2     {
 3     }
 4     class Synchronization
 5     {
 6
 7         public static void MonitorTest()
 8         {
 9             Target target = new Target();
10             for (int i = 0; i < 10; i++)
11             {
12                 System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(work), target);
13             }
14
15             System.Threading.ThreadPool.QueueUserWorkItem((t) => { Synchronization.signalWork(t); },target);
16         }
17
18         public static void work(object state)
19         {
20             Target t = (Target)state;
21             Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " is waiting for enter!");
22             System.Threading.Monitor.Enter(t);
23             System.Threading.Monitor.Wait(t);
24             System.Threading.Monitor.Exit(t);
25             Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId.ToString() + " is exited!");
26         }
27
28         public static void signalWork(object t)
29         {
30             System.Threading.Monitor.Enter(t);
31             System.Threading.Monitor.Pulse(t);//发出一个通知
32             System.Threading.Monitor.PulseAll(t);//向所有等待线程发出通知
33             System.Threading.Monitor.Exit(t);
34         }
35     }

运行结果:

11 is waiting for enter!
10 is waiting for enter!
12 is waiting for enter!
13 is waiting for enter!
14 is waiting for enter!
15 is waiting for enter!
16 is waiting for enter!
17 is waiting for enter!
18 is waiting for enter!
19 is waiting for enter!
11 is exited!
12 is exited!
10 is exited!
13 is exited!
15 is exited!
16 is exited!
18 is exited!
19 is exited!
14 is exited!
17 is exited!

System.Threading.Monitor的使用

时间: 2024-10-09 15:44:28

System.Threading.Monitor的使用的相关文章

System.Threading

线程:定义为可执行应用程序中的基本执行单元. 应用程序域:一个应用程序内可能有多个线程. 上下文:一个线程可以移动到一个特定的上下文的实体 导入命名空间: //得到正在执行这个方法的线程 Thread currThread = Thread.CurrentThread; //获取正在承载当前线程的应用程序 AppDomain ad = Thread.GetDomain(); //获取当前操作线程所处的上下文 System.Runtime.Remoting.Contexts.Context ct

vs2013c#测试using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1_CXY { class Program { stati

首先安装Unit Test Generator.方法为:工具->扩展和更新->联机->搜索“图标为装有蓝色液体的小试管.Unit Test Generator”, 编写代码,生成一个新的类,编写构造函数 与 add()函数.代码如下. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Co

System.Threading.ThreadStateException

异常:"System.Threading.ThreadStateException"在未处理的异常类型 System.Windows.Forms.dll 发生 其它信息: 在能够调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttribute 标记. 仅仅有将调试器附加到该进程才会引发此异常. 分析:线程间操作产生的异常. 解决方式1:Control.CheckForIllegalCrossThreadCalls =

System.Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer的差别和分别什么时候用

一.System.Windows.Forms.Timer 1.基于Windows消息循环,用事件方式触发,在界面线程执行:是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事件上的EvnetHandler.在这种Timer的EventHandler中可 以直接获取和修改UI元素而不会出现问题--因为这种Timer实际上就是在UI线程自身上进行调用的. 2.它是一个基于Form的计时器3.创建之后,你可以使用Interval设置Tick之间的跨

Delphi并行库System.Threading 之ITask 1

不知什么时候,也许是XE8,也许是XE8之前 .Delphi里面多了个System.Threading的并行库. 虽然己经有非常棒的第三方并行库QWorker,但我还是更喜欢官方的东西. 下面是一段使用System.Threading中ITask的代码 procedure TForm3.SpeedButton1Click(Sender: TObject); var tasks: array of ITask; value: Integer; LTask:ITask; X,Y:INTEGER; b

System.Threading.Timer

GLog.WLog("_thdTimer before"); _thdTimer = new System.Threading.Timer(new TimerCallback(TimerProc)); //2秒后开始执行计时器:每3秒执行一次 _thdTimer.Change(2000,3000); GLog.WLog("_thdTimer after"); private void TimerProc(object state) { try { GLog.WLog

C#错误之 System.Threading.ThreadAbortException:正在中止线程

参考:http://www.cnblogs.com/chendaoyin/archive/2013/06/27/3159211.html 1.开启一个子线程 1 //开启一个子线程,子线程调用方法 Method 2 Thread th = new Thread(Method); 3 th.IsBackground = true; 4 th.Start(); 2.线程处理函数 1 public void Method() 2 { 3 try 4 { } 5 catch(Exception ex)

例说定时器System.Threading.Timer

本文通过实例演示System.Threading.Timer的使用方法. 下面是完整的实例代码. using System; using System.Windows; namespace ThreadingTimerExp { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { System.Threading.Timer timer;

using System.Threading;

1 /// <summary> 2 /// 执行动作:耗时而已 3 /// </summary> 4 private void TestThread(string threadName) 5 { 6 Console.WriteLine("TestThread Start Name={2}当前线程的id:{0},当前时间为{1},", 7 System.Threading.Thread.CurrentThread.ManagedThreadId, DateTime