본문 바로가기

Windows/_System Programming

쓰레드(Thread) 동기화 개념

쓰레드 동기화 : 쓰레드 간의 질서가 잘 지켜지고 있음을 의미


쓰레드 동기화의 방법 :

유저 모드 동기화 :
 
동기화가 진행되는 과정에서 커널 코드가 실행되지 않는다.

커널 모드로의 전환이 이뤄지지 않으므로 성능상에 이점이 있지만 기능상의 제한도 있다.


커널 모드 동기화 :
 
커널에서 제공하는 동기화 기능을 활용한다.(유저 모드에서 제공하지 못하는 기능을 제공받을 수 있다)

커널 모드로의 전환으로 인해 성능이 저하된다.



두가지 관점에서의 쓰레드 동기화 :

메모리 접근에 대한 동기화 :

쓰레드들의 임계 영역 동시접근을 막아 동기화한다.

(참고 :

임계 영역(Critical Section) : 배타적 접근(한 순간에 하나의 쓰레드만 접근)이 요구되는

공유 리소스(전역변수와 같은)에 접근하는 코드 블록)

(예 :

쓰레드 A, B 가 전역변수 total 에 값을 변경한다.

이 경우 동시에 total 에 접근할 경우 문제가 생길수 있다.

따라서 total 을 변경하는 코드(임계 영역)에 하나의 쓰레드만 접근할 수 있도록 동기화한다)


동기화 기법 :

1. 크리티컬 섹션(Critical Section) 기반의 동기화 - 유저 모드

2. 인터락 함수(Interlocked Family Of Function) 기반의 동기화 - 유저 모드

3. 뮤텍스(Mutex) 기반의 동기화 - 커널 모드

4. 세마포어(Semaphore) 기반의 동기화 - 커널 모드

5. 이름있는 뮤텍스(Named Mutex) 기반의 프로세스 동기화 - 커널 모드



실행 순서의 동기화 :

메모리에 접근하는 쓰레드의 실행순서를 동기화한다.

(예 :

A 쓰레드는 입력을 받는다.

B 쓰레드는 입력받은 것을 출력한다.

그렇다면 A -> B 실행순서가 지켜지도록 동기화해야 한다)


동기화 기법 :

1. 이벤트(Event) 기반의 동기화 - 커널 모드