Чтобы разблокировать Lock
, рекомендуется вызвать метод unlock()
из выражения finally:
lock.lock();
try{
// critical section which may throw exceptions
} finally {
lock.unlock();
}
Это делается для того, чтобы избежать возможного взаимоблокировки, если исключение выбрано из кода в критическом разделе.
Почему та же практика не рекомендуется для двоичных семафоров в эквивалентных сценариях?
mutex.acquire();
try{
// critical section which may throw exceptions
} finally {
mutex.release();
}