티스토리 뷰

※ 세마포어든 모니터든 이것이 프로세스 수준에서 일어나는 것인지 Thread 수준에서 일어나는 것인지 깊게 신경쓰지 말자

※ 우선은 세마포어와 모니터 그 자체의 원리를 이해하는 것에 초점을 맞추자


- 모니터는 세마포어의 단점을 해결한 상호 배제 메커니즘이다.

- 모니터는 운영체제(OS)에서 처리하는게 아니라 java, C# 같은 프로그래밍 언어 차원에서 지원하는 방법이다.

- java 코드를 예시로 모니터에 대해 알아보자

public class Health {
    private int health = 100;
    
    synchronized void increase(int amount) {
    	health += amount;
    }
    
    synchronized void decrease(int amount) {
    	health -= amount;
    }
}

- 변수 health를 선언한 후 초기값으로 100을 할당했다.

- increase, decrease 함수 2개를 선언했는데 각 함수 앞에 synchronized 라는 키워드가 붙어있다.

- java에서 synchronized 키워드가 붙으면 해당 키워드가 붙은 함수들은 동시에 여러 프로세스에서 실행시킬 수 없다.

- 즉, synchronized 키워드만으로 완벽한 상호배제가 이루어진다는 것이다.

 

ex)

- 프로세스A에서 increase 함수를 호출하면

- 프로세스B에서는 increase 함수를 포함해 synchronized 키워드가 붙은 decrease 함수도 실행할 수 없다.

출처 - 인프런, 그림으로 쉽게 배우는 운영체제

- 모니터의 구현만 완벽하다면 개발자는 세마포어 때의 wait 함수와 signal 함수로 임계영역을 감싸지 않아도 돼서 편리하고 안전한 코드를 작성할 수 있다.


● chatGPT한테 synchronized 물어보기

Q1. java의 synchronized 키워드에 대해 알려줘

 

Q2. 

 

cf)

https://kadosholy.tistory.com/123

 

[Java] 자바 - Synchronized 스레드 동기화 개념 및 사용예제

자바 - Synchronized 스레드 동기화 개념 및 사용예제 자바에서 멀티스레드를 이용하면 여러작업을 동시에 처리할 수 있기 때문에 작업효율이 좋아집니다. 하지만 하나의 공유자원을 여러 스레드에

kadosholy.tistory.com

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함