Я прочитал много материалов по многопоточности и обо всех задействованных механизмах синхронизации. Я также понимаю, как опасно делать это неправильно.
Я только что смотрел это PDC 2009 видео о параллелизме и параллелизме, и здесь снова упоминается, что «блокировки - дорогостоящая операция». Я встречал подобную фразу в различных текстах и книгах, и я слышал, как это говорят эксперты в этой области.
Мне было интересно, что же такого дорогого в получении блокировки (мьютекса или семафора)? Дело в том, что он вызывает команду LOCK #
, которая будет выдана на уровне Ассемблера?
Это тот факт, что для получения блокировки требуется вызов ядра в ОС?
Почему блокировки считаются дорогостоящей операцией? «Дорогой» - довольно относительный термин, поэтому, если мы сравним с созданием нового потока (который требует настройки стека потоков и т.д.), насколько дорого стоит на самом деле получение блокировки?
Что происходит под покровом?
Я предполагаю, что это не может быть так дорого, потому что я уверен, что для работы Windows (например) необходимо постоянно использовать сотни механизмов блокировки / синхронизации.
Кто-нибудь может уточнить?
ПРИМЕЧАНИЕ: мне просто любопытно, я знаю, как работает многопоточность, и я не собираюсь делать какую-то глупую оптимизацию.