В этом руководстве мы рассмотрим бинарные семафоры и повторно входные блокировки (Reentrant Locks). Также мы сравним их между собой, чтобы понять, какая из них лучше подходит для различных ситуаций. Бинарный семафор обеспечивает механизм сигнализации для управления доступом к единственному ресурсу. Иными словами, бинарный семафор реализует взаимное исключение, позволяя только одному потоку одновременно входить в критическую секцию. Для этого он хранит только один доступный "разрешающий" токен. Следовательно, бинарный семафор может находиться только в двух состояниях: разрешение доступно (1) или не доступно (0). Пример простой реализации бинарного семафора с использованием класса Semaphore в Java: Semaphore binarySemaphore = new Semaphore(1);
try {
binarySemaphore.acquire();
assertEquals(0, binarySemaphore.availablePermits());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
binarySemaphore.release();
assertEquals(1, binarySemaphore.availablePermi