Путаница с оператором блокировки в C#

Это из MSDN: Ключевое слово lock гарантирует, что один поток не войдет в критическую секцию кода, пока другой поток находится в критической секции.

Должен ли критический раздел совпадать с критическим разделом?

Или это означает: Ключевое слово lock гарантирует, что один поток не войдет в какой-либо критический раздел, защищенный объектом кода, в то время как другой поток находится в любом критическом разделе, защищенном тем же объектом. ?

    class Program
{
    static void Main(string[] args)
    {
        TestDifferentCriticalSections();

        Console.ReadLine();
    }

    private static void TestDifferentCriticalSections()
    {
        Test lo = new Test();

        Thread t1 = new Thread(() =>
        {
            lo.MethodA();
        });
        t1.Start();

        Thread t2 = new Thread(() =>
        {
            lo.MethodB();
        });
        t2.Start();
    }
}

public class Test
{
    private object obj = new object();

    public Test()
    { }

    public void MethodA()
    {
        lock (obj)
        {
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(500);
                Console.WriteLine("A");
            }
        }
    }

    public void MethodB()
    {
        lock (obj)
        {
            for (int i = 0; i < 5; i++)
            {
                Thread.Sleep(500);
                Console.WriteLine("B");
            }
        }
    }
}
20
задан Cui Pengfei 崔鹏飞 8 March 2012 в 17:18
поделиться