当AutoResetEvent在进程1上调用WaitOne并且在Process2中再次调用它,并且进程2在同一个AutoResetEvent上调用Set时,它是否应该释放Process1上的锁,因为它在进程2中被调用之前?
我有一个示例代码,用于执行进程1和2。 我没有任何参数运行进程1,所以它挂在wh.WaitOne()。 我用一个参数运行进程2,以便它调用Set() 我观察到的是Process 2的锁被释放而不是Process1的。
AutoResetEvent的锁定队列是否应该先出先行?
class ThreadSafe
{
static EventWaitHandle wh = new EventWaitHandle(false, EventResetMode.AutoReset, "abc");
static void Waiter(String t)
{
wh.WaitOne();
}
static void Main(string[] args)
{
new Thread(delegate() { Waiter("a"); }).Start();
if (args.Length > 0)
{
wh.Set();
}
}
}
答案 0 :(得分:1)
士气:您不应该依赖FIFO订单。多线程比它看起来更难。