C#的线程中常用到的两个东西,MSDN给的翻译实在不便于理解,通俗点解释一下。
1. ManualResetEvent manualResetEvent = new ManualResetEvent(false);
manualResetEvent.WaitOne();
代码A 。。。
这里的false相当于初始时没有资源即Reset()状态的,调用WaitOne()后需要等待资源,即manualResetEvent.Set()后,代码A才能执行。
2. ManualResetEvent manualResetEvent = new ManualResetEvent(true);
manualResetEvent.WaitOne();
代码A 。。。
这里的true相当于初始时就有资源即Set()状态的,如果WaitOne()前没有manualResetEvent.Reset(),代码A直接就能执行。
3. 关于false和true的用法AutoResetEvent和ManualResetEvent是相同的,但是不同之处是当有多个线程等待资源时,manualResetEvent.Set()是给所有的等待线程都下放资源,而autoResetEvent.set()是随机给一个线程下放资源,而且不管前面有几个set(),只要有一个线程获取了资源(可以不必等该线程执行完),后面的仍需要再次set()后才能获取资源。相当于AutoResetEvent只有一个共享资源而ManualResetEvent有多个共享资源。