Confusión sobre la declaración de bloqueo en C #

Esto es de MSDN: la palabra clave de bloqueo asegura que un hilo no ingrese una sección crítica de código mientras otro hilo está enla sección crítica.

Hace una sección crítica tiene que ser igual quela sección crítica?

O significa: la palabra clave de bloqueo asegura que un hilo no ingresecualquier sección crítica protegida por un objeto de código mientras otro hilo está en cualquier sección crítica protegida por el mismo objeto. @

    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");
            }
        }
    }
}

Respuestas a la pregunta(12)

Su respuesta a la pregunta