인프런 커뮤니티 질문&답변

강민님의 프로필 이미지
강민

작성한 질문수

재고시스템으로 알아보는 동시성이슈 해결방법

Named Lock 활용해보기

Named Lock에서 락 획득 실패 후 락 해제할 때가 궁금합니다.

작성

·

337

0

NamedLockFacade에서

@Transactional
public void decrease(Long id, Long quantity) {
    try {
        lockRepository.getLock(id.toString());

        stockService.decrease(id, quantity);
    } finally {
        lockRepository.releaseLock(id.toString());
    }
}

락 획득을 하지 못해도 releaseLock이 실행되서 락을 해제하는 코드입니다.

락을 획득하지 못해도 락을 해제하려고 하는데 따로 문제가 발생하진 않나요?

답변 1

0

최상용님의 프로필 이미지
최상용
지식공유자

강민님 안녕하세요.
혹시 어떤부분에서 문제가 발생할거라고 예상하시는지 말씀해주실 수 있으실까요 ?

강민님의 프로필 이미지
강민
질문자

락을 획득하지 못한 상태에서 락을 해제하는 코드가 실행될 때 어떻게 작동되는지 궁금해서 질문 드렸습니다!

최상용님의 프로필 이미지
최상용
지식공유자

https://dev.mysql.com/doc/refman/8.0/en/locking-functions.html#function_release-lock

공식문서에서 release_lock 부분을 살펴보시면 자세한 내용을 아실 수 있습니다!

요약해서 전달을 드리면

  1. 락은 존재하지만 해당 스레드에서 얻은 락이 아닐경우 0 을 반환합니다.

  2. 락이 존재하지 않는다면 null 을 반환합니다.

감사합니다!

강민님의 프로필 이미지
강민

작성한 질문수

질문하기