Помимо общих блокировок менеджера блокировок и мьютексов имеются три других вида доступных блокировок для использования в ядре. Эти другие типы используются не так интенсивно.
Межпроцессная синхронизация ресурса обычно реализуется посредством ассоциирования со структурой lock. В ядре есть менеджер блокировок, который управляет ими. Операции, предусмотренные менеджером блокировок, следующие.
Для инициализации мьютекса до передачи его функции mtx_lock() должна использоваться функция mtx_init(). Функция mtx_init() указывает тип, который код модуля доказательств использует для классификации мьютексов при осуществлении проверки упорядочения блокировок. Не допускается несколько раз передавать функции mtx_init() один и тот же, мьютекс без промежуточных вызовов mtx_destroy().
Мьютексы - это основной способ синхронизации потоков. Главными соображениями в дизайне мьютексов являются следующие.
Циклические блокировки не применяются в однопроцессорной системе, поскольку единственным способом, которым когда-либо будет освобожден ресурс, удерживаемый другим потоком, является запуск этого потока на выполнение. Соответственно при запуске на однопроцессорной системе циклические блокировки всегда преобразуются в ожидающие блокировки.
Исторически системы BSD работали лишь на однопроцессорных архитектурах. Когда процесс начинал работу в верхней половине ядра, он работал до завершения или пока не входил в состояние сна в ожидании доступности ресурса. Единственный конфликт для доступа к структуре данных возникал в моменты, когда он спал или когда во время прерывания было необходимо обновить структуру данных. Синхронизация с другими процессами осуществлялась путем обеспечения согласованности всех разделяемых структур данных перед вхождением в состояние сна.