Насколько эффективна блокировка разблокированного мьютекса? Какова стоимость мьютекса?

На языке низкого уровня (C, C ++ или любой другой): у меня есть выбор между наличием нескольких мьютексов (например, что дает мне pthread или того, что предоставляет нативная системная библиотека) или одного для объекта.

Насколько эффективно блокировать мьютекс? То есть сколько инструкций ассемблера существует и сколько времени они занимают (в случае, если мьютекс разблокирован)?

Сколько стоит мьютекс? Является ли проблемой иметь действительно много мьютексов? Или я могу просто выбросить столько мьютекс-переменных в моем коде, сколько у меня int переменных, и это на самом деле не имеет значения?

(Я не уверен, насколько велики различия между различными аппаратными средствами. Если есть Я также хотел бы знать о них. Но в основном меня интересует общее оборудование.)

Суть в том, чтобы использовать множество мьютексов, каждый из которых покрывает только часть объекта вместо одного мьютекса для весь объект, я мог бы спасти много блоков. И мне интересно, как далеко я должен идти об этом. То есть я должен попытаться как можно безопаснее защитить любой возможный блок, независимо от того, насколько сложнее и сколько мьютексов это означает?


Пост в блоге WebKits (2016) о блокировке очень связан с этим вопросом и объясняет различия между спин-блокировкой, адаптивной блокировкой, фьютексом и т. д.

133
задан Alexis Wilke 30 July 2019 в 04:44
поделиться