강의

멘토링

커뮤니티

Inflearn Community Q&A

mj199504257178's profile image
mj199504257178

asked

Java Concurrency Programming [Reactive Programming Part.1]

Mutual Exclusion

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

Written on

·

409

·

Edited

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();
    }
}
java동시성multithreadsynchronisation

Answer 2

1

leaven님의 프로필 이미지
leaven
Instructor

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

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

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

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

0

mj199504257178님의 프로필 이미지
mj199504257178
Questioner

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

mj199504257178's profile image
mj199504257178

asked

Ask a question