Мьютекс и семафор - две разные вещи. Из-за простоты мьютекса он может быть быстрее, но в то же время он служит другой цели, поэтому сравнивать эти две вещи - все равно что сравнивать нож и винтовку. То же самое касается условных переменных, они просто разные. Вы можете думать о семафоре как о мьютексе с условиями и счетчиком. Используя эти три объекта, вы можете реализовать поведение семафора. Однако семафоры в POSIX могут также использоваться для синхронизации доступа к общим ресурсам между процессами, тогда как мьютекс и условия являются объектами только в процессе.
Что касается легких и быстрых операторов, я думаю, это зависит от реализации. Семафоры в Linux более сложны, так как они поддерживают межпроцессную синхронизацию, а мьютекс и условия используют подсистему futex
с атомарными операциями. Но опять же, сравнивать эти вещи не имеет смысла, поскольку они служат разным целям.
Я бы рекомендовал вам прочитать следующее на эту тему: