Ответ 1
Семафор действует как ограничитель доступной глубины пула ресурсов; например, семафор с емкостью 10 позволяет получить максимум 10 потоков для его получения сразу, а любые другие потоки, которые пытаются его получить, будут блокироваться до тех пор, пока один из других потоков не освободит его.
Это несколько отличается от обычного взаимного исключения или блокировки монитора, который обычно используется для предотвращения одновременного изменения нескольких потоков одним и тем же переменным и вызывания противоречивых результатов или состояния программы.
Рассмотрим, например, пул соединений с лимитом из 10 подключений. Каждый поток, который нуждается в соединении, будет получать семафор в течение всего времени его использования соединения (что предотвращает слишком много потоков, запрашивающих соединения одновременно), но объект пула также должен использовать синхронизированные блоки или методы при выводе соединений из своих внутренних собирать или возвращать их обратно, чтобы предотвратить такие вещи, как потеря следов соединений или ошибочное обращение к одному и тому же соединению с двумя разными потоками, потому что они задавали одновременно.