1. 동기화의 두 가지 관점
- 실행 순서의 동기화
ㆍ쓰레드들이 정해진 특정 순서로 실행되어야 할때 필요
- 메모리 접근의 동기화
ㆍ멀티 쓰레드 기반시 메모리에 접근 할떄 사용
ㆍ크리티컬섹션(Critical Section), 뮤텍스(Mutex), 세마포어(Semaphore) 등이 있따.
2. 동기화 주체로 나누어 본 두 가지 방법
2.1 유저 모드 동기화
- 커널의 힘을 빌리지 않는 동기화 기법이지만 커널의 전환이 불필요해서 성능상 이점이 있지만 그만큼 기능상의 제한이 있다.
- 종류로는
ㆍInterlockedXXX 계열 함수, Critical Section, SpinLock
2.2 커널 모드 동기화
- 커널에서 제공하는 동기화 기능을 활용하는 방법
- 커널 오브젝트를 생성하고 이를 조작하는 함수 호출로 동기호를 진행
- 커널 오브젝트 조작 함수가 호출될 떄마다 커널 모드로의 전환이 발생하므로 성능 저하가 있다.
- 그러나 유저 모드 동기화에 비해 강력한 기능들을 제공한다.
- 종류로는
ㆍMutex, Semaphore, Event
3. 동기화 기법의 종류들
3.1임계 영역(Critical Section)
- 유저모드 동기화 객체
- 유저 레벨의 동기화 방법 이며 동일한 프로세스 내에서만 사용이 가능하다.
- 해당 코드에 접근하기 위해선 접근에 대한 Key가 필요하며 현재 접근한 쓰레드가 Key를 반환 하기 전까지 다른 코드의 접근을 불허한다.
- 예)
ㆍ화장실에 들어가기 위해선 Key가 필요하다.
ㆍA가 화장실에 들어갈 때 Key를 가지고 들어간다. 이때 B는 화장실 Key가 없기 때문에 화장실에 들어갈수 없다
ㆍ볼일을 다본 A가 Key를 제자리에 가져다 놓으면 B는 Key를 가지고 화장실에 들어간다.
※ 핵심 : 열쇠를 가진 사람만이 화장실에 들어갈수 있따.
3.2 뮤텍스(Mutex)
- 커널 모드 동기화 객체
- 크리티컬 섹션보다는 느리지만 프로세스를 넘어서 모든스레드에서 사용될 수 있는동기화 객체
- 뮤텍스는 신호상태로 생성한 후 스레드에서 Wait 함수를 호출하면 뮤텍스는 비신호 상태가 되어서 다른 스레드에서는 접근하지 못한다.
- ReleaseMutex를 호출하면 뮤텍스는 신호상태가 되어 다른스레드들이 접근 가능하다.
3.3 세마포어(Semaphore)
- 커널모드 동기화 객체
- 뮤텍스와 비슷하지만 접근할 수 있는 스레드 갯수를 정할 수 있다.
- 세마포어를 생성할 때 3개의 스레드들이 접근가능하도록 지정하면 내부카운트 값은 3이다.
- 객체 내부적으로 카운트를 관리하며 세마포어 객체를 Wait하는 스레드가 있으면 카운트가 하나씩 감소한다.
- 그래서 내부 카운트가 0이 되면 비신호 상태로 바뀐다.
- 세마포어를 사용하고 있는 스레드들중 ReleaseSemaphore 하면 세머포어 내부 카운트는 다시 1증가하며 신호 상태로 바뀌어 다른 스레드들이 사용가능하게 된다.
'Network Programing > Network 개념' 카테고리의 다른 글
소켓 입출력 모델 - 2. WSAAsyncSelect 모델 (0) | 2016.09.11 |
---|---|
소켓 입출력 모델 - 1.Select 모델 (0) | 2016.09.11 |
소켓 모드 와 동기/비동기 란? (0) | 2016.09.11 |
동기(Sync) 와 비동기(ASync) (0) | 2016.09.01 |
Nagle알고리즘 이란? (0) | 2015.12.24 |