CS

3.스레드 동기화

suwonieee 2023. 2. 9. 00:05

스레드 동기화

싱글스레드 프로세스의 경우 프로세스 내에서 단 하나의 스레드만 작업하기 때문에 프로세스의 자원을 가지고 작업하는데 별문제가 없지만,
멀티스레드 프로세스의 경우 여러 스레드가 같은 프로세스 내의 자원을 공유해서 작업하기 때문에 서로의 작업에 영향을 주게 된다. 한 스레드가 진행 중인 작업을 다른 스레드가 간섭하지 못하도록 막는 것을 '스레드의 동기화(synchronization)'라고 한다.

 

스레드를 동기화하는 방법들

 방법 설명 
 임계영역(critical section)  공유 자원에 대해 단 하나의 스레드만 접근하도록 한다.
 (하나의 프로세스에 속한 스레드만 가능) 
 뮤텍스 (mutex)  공유 자원에 대해 단 하나의 스레드만 접근하도록 한다.
 (서로 다른 프로세스에 속한 스레드도 가능) 
 이벤트 (event)   특정한 사건의 발생을 다른 스레드에게 알린다. 
 세마포어 (Semaphore)  한정된 개수의 자원을 여러 스레드가 사용하려고 할 때 접근을   제한한다.  
 대기 가능 타이머 (waitable timer)  특정 시간이 되면 대기중이던 스레드를 깨운다. 

synchronized를 이용한 동기화

스레드를 동기화하는 방법 중 가장 간단한 방법은 synchronized를 이용해서 임계영역을 설정하는 것이다.

  1. 메서드 전체를 임계 영역으로 설정한다.
  2. 특정한 영역을 임계 영역으로 설정한다.(객체의 참조변수)
  • 임계 영역 (Critical Section)
    • 전역변수에 둘 이상의 쓰레드가 동시에 접근해서 연산을 실행할 경우 문제가 발생할 수 있는데, 문제를 발생하는 코드 블록을 임계 영역이라고 한다.
  • 해결책
    • 임계영역에 대한 문제의 해결책은 임계영역의 동시 접근을 막는 것이다.
    • 즉, 동기화 기법을 통해서 임계 영역은 한 순간에 하나의 쓰레드만 실행될 수 있도록 제한하면 된다.

Reference

동기화(synchronization)와 Thread Safe 제대로 이해하기

https://castlejune.tistory.com/23

[JAVA 기본] Thread의 동기화

https://castlejune.tistory.com/23

java - thread 동기화

https://p829911.tistory.com/9

[13. 쓰레드 동기화 기법]

https://popcorntree.tistory.com/65