Можно ли использовать спин-блокировки с O (1) кодом, не связанным с памятью?

Я пользуюсь спинлоком (потоковой одни) с в общем-то O (1) Доступ / удаление элемента списка в разделе заблокированного кода.

Я говорю в общем-то потому что в 99,9% случаев код не проходит по списку (который может содержать более 1000 элементов).
Код обычно извлекает только один элемент на основе элемента списка намек указатель, а затем выполнить пару если ветки для модификации процитированного намек элемент; все же это должен быть несмежный доступ к памяти.

Это хорошая идея использовать спин-блокировки или я должен перейти на мьютексы?

Я нацеливаюсь на максимальную производительность, не заботясь об использовании ЦП в этом контексте.

ура

2

Решение

После выполнения некоторых тестов с воспроизводимыми контрольными примерами, переключение между pthread mutex а также спинлок реализация, я могу сказать, что если мьютекс использует чуть меньше процессора, то спинлок реализация в два раза быстрее обрабатывает элементы из очереди.

Я считаю правильный ответ, учитывая O (1) характер функции обработки списка и факт этого (в основном) постоянная время крошечный, одобряет спинлок выбор против мьютекс.

Так что, если кто-то хочет достичь максимальной производительности, его не волнуют циклы потерь процессора, Взаимные блокировки предпочтительнее против мьютексы если время выполнения защищенного кода крошечный (и лучше постоянная).

0

Другие решения

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

При небольшом количестве различий между спин-блокировками и мьютексами должно быть мало различий, поскольку неконтролируемый путь сильно оптимизирован в последнем.

Разница возникает, когда критический раздел становится утвержденным. Когда мьютекс берется, блокировка блокирует поток и снимает его с очереди запуска планировщика, и ему требуется гораздо больше времени для пробуждения и блокировки мьютекса, когда он в конечном итоге освобождается, тогда как спин-блокировка просто вращается в надежде, что спин-блокировка выпущен в ближайшее время.

0

По вопросам рекламы [email protected]