命名为EventWaitHandle发布顺序

时间:2009-09-30 21:53:49

标签: c# multithreading

当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();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

锁定中的“公平性”已被弃用,我只能找到this link,但我记得读过一些近期/相关的文章。如果我没记错的话,.NET中的所有锁定机制都放弃了FIFO行为。

士气:您不应该依赖FIFO订单。多线程比它看起来更难。