На языке низкого уровня (C, C++ или что-то еще): у меня есть выбор между наличием нескольких мьютексов (например, что дает мне pthread или того, что предоставляет нативная системная библиотека) или одного для объекта.
Насколько эффективно блокировать мьютекс? То есть сколько инструкций ассемблера существует и сколько времени они занимают (в случае, если мьютекс разблокирован)?
Сколько стоит мьютекс? Является ли проблемой наличие действительно большого количества мьютексов? Или я могу просто добавить столько переменных мьютекса в мой код, сколько у меня есть переменных int
, и это не имеет большого значения?
(Я не уверен, насколько сильно различаются разные аппаратные средства. Если таковые имеются, я бы также хотел узнать о них. Но в основном меня интересует обычное аппаратное обеспечение.)
Дело в том, что, используя множество мьютексов, каждый из которых покрывает только часть объекта, а не один мьютекс для всего объекта, я мог бы сохранить много блоков. И мне интересно, как далеко я должен идти об этом. То есть я должен попытаться действительно обезопасить любой возможный блок, независимо от того, насколько он сложнее и насколько больше мьютексов это означает?
Сообщение в блоге WebKits (2016) о блокировке очень связано с этим вопросом и объясняет различия между спин-блокировкой, адаптивной блокировкой, фьютексом и т.д.