Что на самом деле означают счетчики производительности CLR LocksAndThreads

Я читал о счетчиках производительности блокировок и потоков , но я до сих пор не понимаю, что на самом деле означают некоторые из них. m, в частности, о счетчиках длины очереди и Contention rate и их посекундных аналогах. MSDN сообщает, что первый показывает количество потоков, ожидающих блокировки, а второй показывает количество потоков, получивших блокировку «безуспешно». Я подумал, что если поток ожидает блокировки, это означает, что блокировка не была получена, но, видимо, я ошибаюсь?

Предположим, у меня есть этот пример программы:

static void Main(string[] args)
{
    var t1 = new Thread(RunThread1);
    var t2 = new Thread(RunThread2);
    t1.Start();
    t2.Start();
    t1.Join();
    t2.Join();
}

static void RunThread1()
{
    Thread.Sleep(1000);
    // this lock is acquired immediately. What will counters show at this moment?
    // probably both will be zero?
    lock (m_Lock)
    {
        Thread.Sleep(10000);
    }
}

static void RunThread2()
{
    Thread.Sleep(2000);
    // this lock has to wait for about 9 seconds. What will counters show?
    lock (m_Lock)
    {
        Thread.Sleep(10000);
    }
}

Что будут показывать счетчики при ее выполнении?

6
задан Martin Liversage 23 August 2017 в 20:56
поделиться