Рассмотрим сценарий в ядре, где мы инициируем какое-то действие вне текущего потока, а затем ждем завершения этого действия. Такого рода синхронизации можно добиться с помощью семафоров. Но вместо этого рекомендуется использовать дополнения.
Почему в таких ситуациях предпочтительнее использовать завершения, а не семафоры?
Завершения можно рассматривать как условные переменные, и в основном они реализуются с помощью семафоров с оболочкой над ними. Разве это не верно для дополнений в ядре Linux?
Кроме того, в документации говорится, что завершения лучше и легче, чем семафоры. Чем реализация завершения отличается от семафоров, которые усиливают эти преимущества?