2012-03-06 2 views
2

Предположим, что у нас есть MethodA и MethodB, где тела целых методов находятся в одном большом блоке блокировки. Оба метода используют один и тот же объект для блокировки:Lock() {...} wait time

lock (objectX) 
{ 
    // methodbody 
} 

Существует несколько потоков, которые называют эти два метода.

Два вопроса:

  1. Можно ли измерить общее время ожидания? В том числе: время, необходимое для блокировки и времени, требуемого блокировкой блокировки «другого» метода для завершения выполнения.
  2. Быстро ли вводить блокировки в обоих методах в соответствующих местах вместо инкапсуляции всего тела метода с помощью одного замка? Я понимаю, что здесь мне нужно измерить производительность обоих решений, но я хотел бы услышать ваш опыт и рекомендации

ответ

3

2) Будет ли быстрее ввести блокировки в обоих методах в соответствующих местах

Да. Всегда держите блокированные сегменты как можно короче. Сама фиксация дешева, не заставляйте других ждать, пока вы делаете некритические вещи.

1) Можно ли измерить общее время ожидания? В том числе: время, необходимое для блокировки и времени, требуемого блокировкой блокировки «другого» метода для завершения выполнения.

Не так, я думаю. Для длинных отрезков вы можете заглянуть в процессорное время vs Истекшее время, но в целом: используйте хороший профилировщик.

+2

«Всегда держите запертые сегменты как можно короче». действительно должно быть «Держать заблокированные сегменты как можно короче, не внося чрезмерного блокировки», нет? Захват - это не операция с нулевой стоимостью. –

+0

@ChrisShain Monitor.Enter() очень дешев, когда нет споров. Но да, очень маленькие сегменты - тоже не очень хорошая идея. Это компромисс между переключением контекста и ненужным ожиданием. –

+0

«Всегда держите запертые сегменты как можно короче». Я думаю, стоит отметить, что вы никогда не должны делать их короче. Если вам нужно сделать операцию атома с помощью 'lock', вам нужно включить всю операцию в эту' lock', а не разделить ее на несколько сегментов. – svick

Смежные вопросы