3.스레드 동기화
스레드 동기화
싱글스레드 프로세스의 경우 프로세스 내에서 단 하나의 스레드만 작업하기 때문에 프로세스의 자원을 가지고 작업하는데 별문제가 없지만,
멀티스레드 프로세스의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 된다. 한 스레드가 진행 중인 작업을 다른 스레드가 간섭하지 못하도록 막는 것을 '스레드의 동기화(synchronization)'라고 한다.
스레드를 동기화하는 방법들
| 방법 | 설명 |
| 임계영역(critical section) | 공유 자원에 대해 단 하나의 스레드만 접근하도록 한다. (하나의 프로세스에 속한 스레드만 가능) |
| 뮤텍스 (mutex) | 공유 자원에 대해 단 하나의 스레드만 접근하도록 한다. (서로 다른 프로세스에 속한 스레드도 가능) |
| 이벤트 (event) | 특정한 사건의 발생을 다른 스레드에게 알린다. |
| 세마포어 (Semaphore) | 한정된 개수의 자원을 여러 스레드가 사용하려고 할 때 접근을 제한한다. |
| 대기 가능 타이머 (waitable timer) | 특정 시간이 되면 대기중이던 스레드를 깨운다. |
synchronized를 이용한 동기화
스레드를 동기화하는 방법 중 가장 간단한 방법은 synchronized를 이용해서 임계영역을 설정하는 것이다.
- 메서드 전체를 임계 영역으로 설정한다.
- 특정한 영역을 임계 영역으로 설정한다.(객체의 참조변수)
- 임계 영역 (Critical Section)
- 전역변수에 둘 이상의 쓰레드가 동시에 접근해서 연산을 실행할 경우 문제가 발생할 수 있는데, 문제를 발생하는 코드 블록을 임계 영역이라고 한다.
- 해결책
- 임계영역에 대한 문제의 해결책은 임계영역의 동시 접근을 막는 것이다.
- 즉, 동기화 기법을 통해서 임계 영역은 한 순간에 하나의 쓰레드만 실행될 수 있도록 제한하면 된다.
Reference
동기화(synchronization)와 Thread Safe 제대로 이해하기
https://castlejune.tistory.com/23
[JAVA 기본] Thread의 동기화
https://castlejune.tistory.com/23
java - thread 동기화
[13. 쓰레드 동기화 기법]
https://popcorntree.tistory.com/65
'CS' 카테고리의 다른 글
| [CS] 7. 쿠키와 세션 (0) | 2023.03.02 |
|---|---|
| [CS] 6. 서버, 클라이언트, WAS, DB 서버 (0) | 2023.02.23 |
| [CS] 4. 라우팅과 라우터 (0) | 2023.02.14 |
| 2. 스케줄링 (0) | 2023.02.08 |
| 1. 스레드와 프로세스 (0) | 2023.02.08 |
TAGS.
