[OS] Monitor (모니터) / synchronized 이용 은행 계좌 문제
2021. 6. 13. 20:59ㆍIT
SMALL
모니터
- 현재 동기화 문제를 해결하는 도구 중 하나
- 모니터의 경우, 두 개의 queue가 존재하여 각각의 역할을 함
- 배타 동기
- 하나의 스레드만 공유 자원에 접근할 수 있게 하는 작용
- 특정 스레드가 공유 자원을 사용하는 함수를 사용하고 있으면, 다른 쓰레드는 접근할 수 없고 대기해야 함
- 조건 동기
- 진입 스레드가 블록되면서 새 쓰레드가 진입 가능하게 하는 공간임
- 새 스레드는 조건 동기로 블록된 스레드를 깨울 수 있음
- 깨워진 스레드는 현재 스레드가 나가면 재진입할 수 있음
- 배타 동기
Monitor vs Semaphore
- Semaphore
- 임계구역 앞에 설치되어 있는 초기값을 통해 들어갈 수 있는 한계 설정 -> S
- 들어갈 때 acquire() / 나올 때 release 명령을 실행해 주어야 함
- monitor
- 함수에 synchronized 키워드를 이용해 상호배제 지켜줄 수 있음
Monitor in Java
이전에는 Semaphore를 이용해서 은행 계좌 예제를 풀어보았다면 monitor를 통해서도 풀어보겠습니다.
자바의 모든 객체는 모니터가 될 수 있습니다
Acc_syn.java
public class Acc_syn {
private int balance = 0;
// deposit = 예금
synchronized public void deposit(int money) {
System.out.println(Thread.currentThread().getName() + " : " + money + "원");
balance += money;
System.out.println("현재 잔액 : " + balance + "원");
}
synchronized public void withDraw(int money) {
System.out.println(Thread.currentThread().getName() + " : " + money + "원");
balance -= money;
System.out.println("현재 잔액 : " + balance + "원");
}
public void printBalance() {
// 잔액 출력
System.out.println("현재 잔액 : " + balance);
}
}
bank.java
import java.util.concurrent.Semaphore;
public class Bank {
static final int LOOP = 2;
public static void main(String[] args) {
Acc_syn a = new Acc_syn();
a.deposit(10);
a.withDraw(10);
a.printBalance();
}
}
LIST
'IT' 카테고리의 다른 글
[컴퓨터 보안] DOS/DDOS 공격 (0) | 2021.06.14 |
---|---|
[OS] CPU 스케줄링 (0) | 2021.06.14 |
[OS] Semaphore, Ordering, Mutex (은행 계좌 자바 예제) (0) | 2021.06.13 |
[OS] 프로세스 동기화 (Process Synchronization)) (0) | 2021.06.13 |
[OS] 메모리 관리 요약 (0) | 2021.06.13 |