Насколько эффективен try_lock для мьютекса? - PullRequest
0 голосов
/ 06 сентября 2010

Насколько эффективен try_lock на мьютексе?Т.е. сколько там инструкций на ассемблере, вероятно, и сколько времени они занимают в обоих возможных случаях (т. Е. Мьютекс уже был заблокирован или был свободен и мог быть заблокирован).проблемы, чтобы ответить на вопрос, вот как (в случае, если это действительно неясно):

Если этот ответ во многом зависит от реализации ОС и аппаратного обеспечения: Пожалуйста, ответьте на него для распространенных ОС (например, Linux), Windows, MacOSX), последние их версии (если они сильно отличаются от предыдущих версий) и общее оборудование (x86, amd64, ppc, arm).

Если это также зависит от библиотеки: возьмите pthreadв качестве примера.

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

Кроме того, я задал этот вопрос отдельно от производительности lock, поскольку я не уверен, что try_lock может вести себяразные.Возможно также в зависимости от реализации.Опять же, пожалуйста, ответьте на него для общих реализаций.И этот очень похожий / связанный вопрос, очевидно, показывает, что это интересный вопрос, на который можно ответить.

1 Ответ

2 голосов
/ 08 сентября 2010

Мьютекс - это логическая конструкция, независимая от любой реализации.Поэтому операции над мьютексами не являются ни эффективными, ни неэффективными - они просто определены.

Поэтому ваш вопрос сродни вопросу «Насколько эффективен автомобиль?», Без ссылки на то, о каком автомобиле вы говорите.

Я мог бы реализовать мьютексы в реальном мире сдымовые сигналы, почтовые голуби или карандаш и бумага.Я мог бы также реализовать их на компьютере.Я мог бы реализовать мьютекс с некоторыми операциями на Cray 1, на Intel Core 2 Duo или на 486 в моем подвале.Я мог бы реализовать их в оборудовании.Я мог бы реализовать их в программном обеспечении в ядре операционной системы, или в пользовательском пространстве, или с использованием некоторой комбинации этих двух.Я мог бы имитировать мьютексы (но не реализовывать их), используя алгоритмы без блокировок, которые гарантированно не конфликтуют в критической секции.

РЕДАКТИРОВАТЬ: Ваши последующие правки не помогают ситуации.«На низкоуровневом языке (например, C или как-то еще)» в основном не имеет значения, потому что тогда мы измеряем производительность реализации языка, и в лучшем случае это скользкий уклон.«[F] rompthread или все, что предоставляет нативная системная библиотека», также бесполезно, потому что, как я уже сказал, существует множество способов реализации мьютексов в различных средах, и это даже не полезное сравнение.

Вот почему ваш вопрос без ответа.

...