Я читал о счетчиках производительности блокировок и потоков , но я до сих пор не понимаю, что на самом деле означают некоторые из них. 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);
}
}
Что будут показывать счетчики при ее выполнении?