LISTORY
[윈도우즈 시스템 프로그래밍] 쓰레드 동기화 기법1 본문
뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 youtube 강의 정리이다.
오늘 다룰 내용은 쓰레드 동기화 기법이다.
YouTube 주소 : 쓰레드 동기화 기법
쓰레드 동기화 기법
⊙ 동기화란 무엇인가?
모두가 다 아다시피, A, B 쓰레드가 코드를 통해 동시에 한 메모리 접근하면 문제가 생긴다.
실제로 둘 이상의 쓰레드가 하나의 메모리에 접근하도록 그 원인(위험요소)을 제공하는 코드의 블럭을 우리는 임계영역이라 부른다.
즉, 임계영역에서는 한 순간에 하나의 쓰레드만 실행하도록 허용해야 하는데, 이런 것을 접근을 동기화한다고 한다.
여기서 접근은 메모리에 대한 접근을 뜻한다.
임계영역에 접근하는 것을 동기화 한다 = 한 순간에 하나의 쓰레드만 접근하도록 하겠다.
반면, 실행 순서에 대한 동기화도 있다.
우리가 쓰레드를 실행할 때, 쓰레드를 컨트롤 하는 것은 불가능하다.
근데 실제로 a 쓰레드가 b 쓰레드보다 조금 더 빨리 실행했으면 좋겠다, 예를 들면, a 쓰레드가 뭔가를 만들어내면 만들어낸 결과를 가지고 b쓰레드가 연산을 해야하는 경우 등이 존재한다.
그럼 a가 분명히 먼저 실행되야하고, 그 이후에 b 쓰레드가 실행되어야 한다.
즉, 순서가 중요하다.
이렇게 순서를 정해 쓰레드가 실행되도록 컨트롤하는 것을 순서 동기화라고 한다.
이렇게 동기화에는 메모리 동기화, 순서 동기화가 있다.
일반적으로 임계영역 동기화와 순서 동기화는 기법적으로 차이가 있다.
여기서 이번 장의 포커스는 메모리 동기화이다. 순서 동기화는 14장에서 다루도록 하겠다.
⊙ 동기화 기법
동기화 기법에는 크게 두가지가 있다. 지난 번에 다룬적이 있는 유저, 커널 모드이다.
유저 모드 : 커널의 도움을 받지 않고 기능 제공
커널 모드 : 커널 레벨에서 직접 기능 제공
유저모드와 커널모드의 장점을 복습하자면 다음과 같다.
유저 모드는 커널 모드와 유저 모드로의 빈번한 이동이 없어 속도가 빠르다. 하지만 커널 모드가 제공해주는 것만큼 기술이 다양하지 않다.
반면 커널 모드는 다양한 기능을 제공받는다.
예를 들어, 쓰레드 동기화를 한다하면 보통 우리가 생각하는 것은
하나의 프로세스 내에 존재하는 여러 쓰레드들 간의 동기화를 생각한다.
하지만 커널 모드에서 제공해주는 동기화 기법을 쓸 경우에는 다른 프로세스 내에 존재하는 쓰레드와도 동기화가 가능하다.
⊙ 쓰레드 동기화 기법의 두 가지 구분
▶ 유저모드 동기화
크리티컬 섹션 기반 동기화
인터락 함수 기반 동기화
크리티컬 섹션은 임계 영역을 뜻한다.
크리티컬 섹션 기반 동기화는 임계영역을 동기화하자는게 아니라 윈도우즈에서 제공해주는 기능중에 하나(방법)이다.
메모리 동기화를 할 때, 보편적으로 동기화 시킬 영역이 상당히 작다. 변수 하나 두개일 경우도 많다.
이 때 인터락 함수 기반 동기화를 쓸 경우 사용이 굉장히 간단하다.
▶커널 모드 동기화
뮤텍스 기반 동기화
세마포어 기반 동기화
이름있는 뮤텍스 기반 동기화
이벤트 기반 동기화
커널 모드 동기화의 위에 세개는 메모리에 대한 접근을 동기화하고, 이벤트 기반 동기화의 경우 실행 순서를 동기화시킬 때 주로 사용한다.
그래서 이벤트 기반 동기화는 다음장에서 다루도록 하겠다.
'IT > 윈도우 프로그래밍' 카테고리의 다른 글
[윈도우즈 시스템 프로그래밍] 커널 모드 동기화(1) (0) | 2018.09.16 |
---|---|
[윈도우즈 시스템 프로그래밍] 유저 모드 동기화 (0) | 2018.09.16 |
[윈도우즈 시스템 프로그래밍] 2부 정리 (4) (0) | 2018.09.02 |
[윈도우즈 시스템 프로그래밍] 2부 정리 (3) (0) | 2018.09.01 |
[윈도우즈 시스템 프로그래밍] 2부 정리(2) (0) | 2018.09.01 |