Вопрос проверяет понимание различий между основными примитивами синхронизации.
Semaphore и mutex решают похожие задачи, но работают по-разному. Mutex предназначен для взаимного исключения и допускает только один поток в критическую секцию. Semaphore может разрешать доступ нескольким потокам одновременно. Mutex обычно привязан к потоку-владельцу, semaphore — нет. Semaphore более гибкий, но и более опасный в неправильном использовании.
Semaphore и mutex используются для защиты общих ресурсов, но их семантика различается.
Mutex — это примитив синхронизации, который гарантирует эксклюзивный доступ одного потока.
Количество потоков
Mutex: всегда один
Semaphore: один или больше
Владение
Mutex захватывается и освобождается одним и тем же потоком
Semaphore может быть освобождён другим потоком
Сценарии использования
Mutex — защита критической секции
Semaphore — контроль параллелизма
// пример mutex опущен для краткости
Для защиты данных — mutex / lock
Для ограничения задач — semaphore
Mutex проще и безопаснее для защиты данных. Semaphore стоит использовать только тогда, когда нужен контроль количества одновременных операций.