Я рад, что вам нужно подумать об этом, потому что всегда хорошо выйти из зоны комфорта, но, как здесь говорили другие, то, что вы написали, не является семафором. Вы начали думать о проблеме взаимной исключительности, но не ее решили.

Семафор - это немного более сложная форма базовой низкоуровневой взаимоисключающей блокировки, реализованной на уровне ядра, которая гарантирует, что никакие два процесса не смогут получить доступ к одному и тому же ресурсу, даже если они запросят его в то же время.

Традиционно в своей основе они полагаются на специальную атомарную машинную инструкцию, называемую чем-то вроде «проверить и установить», которая проверяет состояние флага и устанавливает его только в том случае, если он еще не установлен. Важно отметить, что вся операция выполняется в одном машинном цикле, поэтому она не может быть прервана аппаратным прерыванием или другим процессом. Это означает, что тот, кто устанавливает флаг, фактически получил разрешение на использование рассматриваемого ресурса, будучи уверенным в том, что никакой другой код не может использовать его одновременно.

Вот как это работает для многопоточных одноядерных систем. Конечно, с современными многоядерными процессорами ситуация еще более сложная.