오늘도 개발
동기화(프로세스 동기화, 스레드 동기화) 본문
1. 프로세스의 종류
Independent 프로세스
다른 프로세스와 영향을 주고 받지 않는 독립적인 프로세스
Cooperative 프로세스
다른 프로세스와 영향을 주고 받는 프로세스
Independent 프로세스보다 많이 사용됨.
2. 동기화란?
Race Condition
공유하는 데이터에 두 개 이상의 프로세스(또는 스레드)가 동시에 접근했을 때,
데이터의 일관성(data inconsistency)이 깨지는 경우를 Race Condition이라고 한다.
ex) 통장 잔고가 10만원 있음.
A에게 계좌이체 6만원, B에게 계좌이체 7만원하라는 명령이 동시에 들어온다면?
A 프로세스가 잔고를 읽었을 때 10만원이 있었기 때문에 6만원 송금.
B 프로세스도 잔고를 읽었을 때 10만원이 있었기 때문에 7만원 송금.
=> 잔고는 10만원인데 13만원이 출금됨
동기화
Race Conditon을 방지하고 데이터의 일관성을 유지할 수 있게 해주는 방법을 뜻함.
프로세스 동기화 : 여러 프로세스가 공유하는 자원을 한 번에 한 프로세스만 쓰게 함.
스레드 동기화 : 여러 스레드가 공유하는 자원을 한 번에 한 스레드만 쓰게 함.
3. critical section (임계 영역)
임계 영역이란?
여러 프로세스(스레드)가 동시에 접근하면 문제가 발생할 수 있는 코드 영역.
동기화 작업을 해주어야 하는 코드 영역.
임계 영역 문제를 해결하기 위한 조건
1) Mutual Exclusion(상호 배제) : 한 프로세스가 임계구역에 들어가 있는 경우, 다른 프로세스는 들어올 수 없어야 한다.
2) Progress(진행) : 임계구역에 들어간 프로세스가 없는 경우, 어떤 프로세스를 들여보낼지 적절하게 선택해주어야 한다.
3) Bounded Waiting(진행 대기) : 한 번 들어갔다 나온 프로세스는 다음에 들어갈 때 제한을 둔다.(기아 상태 방지)
4. 동기화 기법
Mutex(Mutual Exclusion)
한번에 한 프로세스(스레드)만 공유자원에 접근할 수 있게 하는 방법.
뮤텍스 객체를 가진 스레드만 임계 영역에 들어갈 수 있다.
뮤텍스는 자물쇠 역할을 하는데,
임계 영역에 들어간 스레드는 다른 스레드가 들어오지 못하게 잠근다.
볼 일이 끝는 스레드가 나오면서 뮤텍스를 반납하면
다른 스레드가 뮤텍스를 갖고 임계영역에 들어갈 수 있다.
예를 들어 화장실과 화장실 키가 하나 있는 식당을 생각해보자.
화장실을 갈 때 키를 가지고 들어가면 다른 사람은 화장실을 사용할 수 없다.
Semaphore
뮤텍스와 달리 한 번에 임계영역에 접근할 수 있는 프로세스(스레드)가 1개 이상일 수 있다.
자물쇠가 아니라 접근 가능한 프로세스(스레드)의 수를 표시해서 상호배제를 달성한다.
동기화 대상이 하나 이상일 때 사용한다.
예를 들어 화장실이 세 개 있는 식당을 생각해보자.
화장실 입구에는 전광판이 있어서 현재 빈 칸이 몇 개인지 보여준다.
빈 칸이 1개 이상인 경우에만 화장실을 이용할 수 있다.
'CS' 카테고리의 다른 글
| 프로세스와 스레드 (0) | 2022.10.27 |
|---|---|
| 컴파일 VS 인터프리팅 (0) | 2022.05.25 |