Почему так часто произносится фраза «блокировки - дорогостоящая операция»?

Я прочитал много материалов по многопоточности и обо всех задействованных механизмах синхронизации. Я также понимаю, как опасно делать это неправильно.

Я только что смотрел это PDC 2009 видео о параллелизме и параллелизме, и здесь снова упоминается, что «блокировки - дорогостоящая операция». Я встречал подобную фразу в различных текстах и ​​книгах, и я слышал, как это говорят эксперты в этой области.

Мне было интересно, что же такого дорогого в получении блокировки (мьютекса или семафора)? Дело в том, что он вызывает команду LOCK # , которая будет выдана на уровне Ассемблера?

Это тот факт, что для получения блокировки требуется вызов ядра в ОС?

Почему блокировки считаются дорогостоящей операцией? «Дорогой» - довольно относительный термин, поэтому, если мы сравним с созданием нового потока (который требует настройки стека потоков и т.д.), насколько дорого стоит на самом деле получение блокировки?

Что происходит под покровом?

Я предполагаю, что это не может быть так дорого, потому что я уверен, что для работы Windows (например) необходимо постоянно использовать сотни механизмов блокировки / синхронизации.

Кто-нибудь может уточнить?

ПРИМЕЧАНИЕ: мне просто любопытно, я знаю, как работает многопоточность, и я не собираюсь делать какую-то глупую оптимизацию.

12
задан Tony The Lion 25 January 2012 в 23:44
поделиться