区别ManualResetEvent:
使用AutoResetEvent和使用ManualResetEvent是完全相同的,只有一点区别:在使用autoresetevent时,在调用waitOne后,会自动执行到一个reset方法。
AutoResetEvent的waitone相当于将ManualResetEvent.waitone和reset合并为一个方法执行。
需要注意:autoresetevent的waitone和reset合并为了一个原子操作;
代码示例:
namespace 使用AutoResetEvent
{
class Program
{
AutoResetEvent mre = new AutoResetEvent(false);
static void Main(string[] args)
{
Thread.CurrentThread.Name = "main ";
Program p = new Program();
Thread worker = new Thread(p.ThreadEntry);
worker.Name = "worker";
worker.Start();
Console.WriteLine("main :start worker");
p.mre.Set();
Thread.Sleep(100);
Console.WriteLine("main:worker go...");
p.mre.Set();
Thread.Sleep(100);
}
void ThreadEntry() {
int i = 0;
string name = Thread.CurrentThread.Name;
while (i<10)
{
mre.WaitOne(); //这里实际上是waitone和reset************
Console.WriteLine("{0}:{1}---{2}",name ,i,DateTime .Now .Millisecond);
i++;
}
}
}
}