Вы в основном правы. Существует SW API, который требует специального оборудования для правильной работы. Реализации семафоров в программном обеспечении, которых немного, основаны на некоторой инструкции HW, которая гарантированно является атомарной.
Атомность в HW требуется для реализации семафора. Обычно инструкции HW не являются атомарными.
Чтобы уточнить, вам нужно реализовать семафор, читая и записывая фрагмент общей памяти, который виден более чем одному процессору. Чтение и запись этого общего фрагмента памяти не является элементарной операцией в целом: например, если вы выполняете чтение с последующей записью, между чтением и записью могут быть запланированы другие инструкции.