티스토리 뷰
※ 세마포어든 모니터든 이것이 프로세스 수준에서 일어나는 것인지 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
'CS > 운영체제' 카테고리의 다른 글
#24 데드락 해결 by 은행원 알고리즘(Banker's algorithm) (0) | 2023.05.21 |
---|---|
#23 데드락(deadlock, 교착상태) by 공유자원 (0) | 2023.05.15 |
#21 프로세스 동기화 - 세마포어 (0) | 2023.05.10 |
#20 프로세스 동기화 - 공유자원과 임계구역 (0) | 2023.05.09 |
#19 프로세스 동기화 - 프로세스 간 통신 (0) | 2023.05.08 |
- Total
- Today
- Yesterday
- Advanced Stream
- OS
- MongoDB
- 운영체제
- 코딩테스트
- Stream
- 자료구조
- Phaser3
- Phaser
- db
- 알고리즘
- SpringBoot
- 메모리
- Java8
- git
- node.js
- SQL
- 코테
- 빅데이터
- jpa
- 프로그래머스
- java
- API
- spring
- nosql
- DART
- Spring Boot
- 프로세스
- MySQL
- 빅데이터 분석기사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |