Это полностью зависит от того, какие данные вы пытаетесь защитить с помощью этой блокировки и откуда (в каком контексте) эти данные могут быть доступны (кроме рабочей очереди).Если к блокировке и соответствующим данным также можно получить доступ из атомарного контекста (например, обработчики прерываний), вам следует использовать соответствующую блокировку .
Рабочая очередь составляет около контекст процесса , поэтому при необходимости разрешается переходить в спящий режим.Также ложиться спать, удерживая spin_lock
, будет фатальной ошибкой.Таким образом, в рабочей очереди вы можете использовать спящие функции, но не удерживая spin_lock
.
Семафоры - это спящие блокировки, такие как мьютексы , поэтому, если ваши данные и соответствующая блокировка не будутиспользуется изнутри атомный контекст , я не вижу причин отказываться от мьютексов / семафоров.
Дополнительная информация:
Прерывания, спин-блокировки и вытеснение
Защита мьютекса обработчика прерываний ядра Linux .