История изменений
Исправление KivApple, (текущая версия) :
mutex не обязательно должен быть объектом ядра. Чисто технически их можно реализовать на 90% в userspace, от ядра потребуются только сисколлы для усыпления-пробуждения потоков (чтобы не крутить зря циклы ожидания). При этом:
1) Захват свободного мьютекса и освобождение мьютекса, который никто не ждёт, может быть произведён без обращения к ядру (не надо ни засыпать самому при захвате, ни пытаться пробудить другие потоки при освобождении)
2) Некоторые реализации перед тем как уснуть в ожидании мьютекса крутят некоторое количество busy loop ожидания - на многоядерной системе это может оказаться выгоднее (поток на соседнем ядре освободит мьютекс быстрее, чем займут времени сисколлы усыпления и пробуждения).
Однако, конкретная реализация pthread может не использовать эти возможности. Тут я уже не знаю... Я только знаю, что снизить стоимость mutex можно.
Исходная версия KivApple, :
mutex не обязательно должен быть объектом ядра. Чисто технически их можно реализовать на 90% в userspace, от ядра потребуются только сисколлы для усыпления-пробуждения потоков (чтобы не крутить зря циклы ожидания). При этом:
1) Захват свободного мьютекса и освобождение мьютекса, который никто не ждёт, может быть произведён без обращения к ядру
2) Некоторые реализации перед тем как уснуть в ожидании мьютекса крутят некоторое количество busy loop ожидания - на многоядерной системе это может оказаться выгоднее (поток на соседнем ядре освободит мьютекс быстрее, чем займут времени сисколлы усыпления и пробуждения).
Однако, конкретная реализация pthread может не использовать эти возможности. Тут я уже не знаю... Я только знаю, что снизить стоимость mutex можно.