На самом деле семафоры также полагаются на атомарные функции (в большинстве реализаций) - посмотрите spinlocks - это что-то вроде низкоуровневых семафоров с различными характеристиками производительности.
Однако иногдаСитуация, когда в критической секции операция настолько проста, что ее можно выполнить атомарно - например, увеличить счетчик.Существуют более сложные вещи, такие как помещение элемента в очередь, что может быть выполнено с помощью атомарных операций (хотя не только с помощью одной операции).
В любом случае, использование семафора может привести к тупиковой ситуации в некоторых случаях, используяОперации без блокировок, вы просто ничего не блокируете, поэтому вы не можете нарушить порядок блокировки.
Конечно, атомарные операции не способны на все, некоторые структуры данных просто не могут быть свободны от блокировок.иногда вы выполняете сложную операцию по сети, во время которой вам нужно быть заблокированным ... Семафоры по-прежнему требуются.
И с ошибочным кодом, использующим атомарность, даже если вы не заканчиваете тем, что поток спит вечнона семафоре вы можете получить нить, крутящуюся в цикле.