더북(TheBook)

코드 10-3과 비교해 보면 #1~#3까지 단 세 줄이 추가되었습니다.

먼저 Lock 객체를 생성하고(#1) 임계 영역이 시작되는 곳에서 lockacquire() 메서드를 호출합니다(#2). acquire() 메서드는 Lock 객체를 ‘획득’합니다. 한 스레드가 획득한 다음에는 다른 스레드가 acquire() 메서드를 호출해도 다른 스레드는 Lock 객체를 획득하지 못하고 대기 상태에 있습니다. Lock 객체를 획득했던 스레드가 임계 영역을 빠져나와 release() 메서드를 호출합니다(#3). release() 메서드는 Lock 객체를 ‘반환’합니다. 임계 영역을 빠져나온 스레드가 Lock 객체를 반환할 때 여러 스레드가 acquire() 메서드 호출로 인해 대기 상태에 있다면 그중 한 스레드가 Lock 객체를 획득하고 임계 영역에 진입합니다.

실행 결과를 보면 이제 우리가 예상한 값이 나옵니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.