Source: https://www.freertos.org/Real-time-embedded-RTOS-mutexes.html
Перевод может содержать ошибки. Читайте первоисточник.
[Межзадачное взаимодействие и синхронизация]
[См. также Blocking on Multiple RTOS Objects]
Мьютексы - это бинарные семафоры, которые включают механизм наследования приоритетов. В то время, как бинарные семафоры являются лучшим выбором для синхронизации (между задачами, либо между задачами и прерываниями), мьютексы лучше всего подходят для реализации простого взаимного исключения. Отсюда и название: 'MUT'ual 'EX'clusion.
При использовании взаимного исключения мьютекс действует как токен, который служит для защиты ресурса. Когда задаче нужно получить доступ к ресурсу, то она сначала должна получить (взять, 'take') мьютекс. Когда задача завершает работу с ресурсом, она должна вернуть (выдать, 'take') токен обратно, предоставив другим задачам возможность получить доступ к тому же ресурсу.
Мьютексы используют те же функции API, что и семафоры, поэтому для них тоже можно задавать время блокировки. Время блокировки указывает количество тиков RTOS, в течение которых задача будет оставаться в заблокированном состоянии при попытке захватить мьютекс, если он не доступен сразу. Однако в отличие от бинарных семафоров мьютексы используют механизм наследования приоритетов. Это означает, что высокоприоритетная задача, заблокированная на ожидании мьютекса, который в данный момент удерживается низкоприоритетной задачей, временно поднимает приоритет низкоприоритетной задачи до уровня заблокированной высокоприоритетной задачи. Этот механизм предназначен для того, чтобы высокоприоритетная задача оставалась заблокированной на минимально возможное время, и при этом минимизировать "инверсию приоритетов", которая уже произошла.
Наследование приоритетов не позволяте полностью избавиться от инверсии приоритетов! Оно лишь позволяет минимизировать отрицательный эффект в некоторых ситуациях. Приложения с жёсткими требования к выполнению в реальном времени должны быть спроектированы таким образом, чтобы в первую очередь исключить возможность возникновения таких ситуаций.
Мьютексы не должны использоваться в прерываниях по следующим причинам:
Список функций API для управления семафорами/мьютексами приведён в документации. Примеры их использования вы найдёте в файлах в каталоге FreeRTOS/Demo/Common/Minimal. Обратите внимание, что в прерываних допустимо использовать только те функции, которые имеют суффикс "FromISR".
В учебнике по FreeRTOS вы найдёте дополнительную информацию по очередям, бинарным семафорам, мьютексам, счётным семафорам и рекурсивным семафорам. Также там в демонстрационных проектах приведены простые примеры их использования.