동시성 제어 / Concurrency
Monitor & Message Passing
인터랙티브 시각화
모니터 내부로 들어온 스레드만 실행됩니다.
wait()하면 조건 대기열로 이동하고,
signal()하면 깨어납니다.
스레드를 입장시켜 보세요
채널(channel)로 메시지를 send하고 receive합니다.
공유 메모리 없이 통신 — Go의 goroutine + channel 모델과 같습니다.
send()로 채널에 메시지를 넣어보세요
MONITOR
- 공유 자원 + 락 + 조건변수를 하나로 캡슐화
- 한 번에 스레드 1개만 실행
wait() → 락 해제 후 조건 대기열에서 수면
signal() → 대기 중인 스레드를 깨움
- Java
synchronized, Python Condition
MESSAGE PASSING
- 공유 메모리 없음 — 채널로만 통신
- 버퍼 가득 →
send() 블로킹
- 버퍼 비면 →
receive() 블로킹
- Go channel, Erlang, Rust
mpsc
- 동기화 문제를 구조적으로 제거