English 中文(简体)
为什么我不能获得独占锁?
原标题:
  • 时间:2009-04-13 20:04:37
  •  标签:

打印以下程序:

Entered 3
Entered 4
Wait for Exited messages
Exited 3
Exited 4

这意味着它无法获取对资源的独占锁定。为什么?

public class Worker
    {
        public void DoIt(object resource)
        {
            Monitor.Enter(resource);
            Console.WriteLine("Entered " + Thread.CurrentThread.ManagedThreadId);
            Thread.Sleep(3000);
            Monitor.Exit(resource);
            Console.WriteLine("Exited " + Thread.CurrentThread.ManagedThreadId);
        }
    }

    class Program
    {
        struct Resource
        {
            public int A;
            public int B;
        }

        static void Main(string[] args)
        {
            Resource resource;
            resource.A = 0;
            resource.B = 1;

            var a = new Worker();
            var b = new Worker();

            var t1 = new Thread(() => a.DoIt(resource));
            var t2 = new Thread(() => b.DoIt(resource));

            t1.Start();
            t2.Start();

            Console.WriteLine("Wait for Exited messages");
            Console.ReadLine();
        }
    }
最佳回答

您的资源是一个结构。当它被传递给<code>DoIt</code>时,它会被装箱,所以每次对<code>DoIt</code>的调用都会锁定一个不同的对象。将<code>资源</code>更改为类。

问题回答

暂无回答




相关问题
热门标签