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

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

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

Mutual Exclusion - 상호 배제

뮤텍스 수도 코드에 대한 질문

작성

·

282

·

수정됨

0

락을 점유중인 스레드만이 락을 해제할 수 있으므로 release에 while문은 필요없지않나요?

 

1. 락을 점유한 스레드만이 release할 수 있음.

2. 즉 release할때는 하나의 스레드만이 접근 가능함.

3. 고로 release에 있는 while문은 필요가없음.

추가로 제공해주신 아래 코드에서 lock 변수가 강의에서 보여주신 수도코드에서는 synchronized가 lock을 의미하고 value를 의미하는거죠?? 용어가 헷갈려서 문의드립니다.

public class Mutex {
    private boolean lock = false;
    public synchronized void acquired() {
        while (lock) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        this.lock = true;
    }
    public synchronized void release() {
        this.lock = false;
        this.notify();
    }
}

답변 2

1

정수원님의 프로필 이미지
정수원
지식공유자

수도 코드에서 while은 락을 점유한 스레드만 락을 해제하기 위한 장치입니다

즉 아무나 release 를 실행할 수 없도록 하기 위함입니다

한 스레드가 aquired 를 실행한 상태에서 다른 스레드가 release 를 실행하지 못하게 해야 하는데 그럼 어떤 식으로 막을 수 있을까요?

자바에서는 synchronized 가 그 역할을 하고 있습니다

0

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

이해했습니다~ 감사합니다

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

작성한 질문수

질문하기