강의

멘토링

커뮤니티

Inflearn コミュニティ Q&A

mj199504257178 のプロフィール画像
mj199504257178

投稿した質問数

Javaの並行性プログラミング[Reactive Programming Part.1]

Mutual Exclusion - 相互排他

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

作成

·

424

·

編集済み

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

回答 2

1

leaven님의 프로필 이미지
leaven
インストラクター

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

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

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

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

0

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

mj199504257178 のプロフィール画像
mj199504257178

投稿した質問数

質問する