LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

mutex не обязательно должен быть объектом ядра. Чисто технически их можно реализовать на 90% в userspace, от ядра потребуются только сисколлы для усыпления-пробуждения потоков (чтобы не крутить зря циклы ожидания). При этом:

1) Захват свободного мьютекса и освобождение мьютекса, который никто не ждёт, может быть произведён без обращения к ядру (не надо ни засыпать самому при захвате, ни пытаться пробудить другие потоки при освобождении)

2) Некоторые реализации перед тем как уснуть в ожидании мьютекса крутят некоторое количество busy loop ожидания - на многоядерной системе это может оказаться выгоднее (поток на соседнем ядре освободит мьютекс быстрее, чем займут времени сисколлы усыпления и пробуждения).

Однако, конкретная реализация pthread может не использовать эти возможности. Тут я уже не знаю... Я только знаю, что снизить стоимость mutex можно.

Исходная версия KivApple, :

mutex не обязательно должен быть объектом ядра. Чисто технически их можно реализовать на 90% в userspace, от ядра потребуются только сисколлы для усыпления-пробуждения потоков (чтобы не крутить зря циклы ожидания). При этом:

1) Захват свободного мьютекса и освобождение мьютекса, который никто не ждёт, может быть произведён без обращения к ядру

2) Некоторые реализации перед тем как уснуть в ожидании мьютекса крутят некоторое количество busy loop ожидания - на многоядерной системе это может оказаться выгоднее (поток на соседнем ядре освободит мьютекс быстрее, чем займут времени сисколлы усыпления и пробуждения).

Однако, конкретная реализация pthread может не использовать эти возможности. Тут я уже не знаю... Я только знаю, что снизить стоимость mutex можно.