다중 스레드 환경의 프로그램에서 여러 스레드 사이에서 공유하는 리소스를 사용한다면 반드시 스레드 간 동기화를 해줘야 한다. Windows 환경이라면 스레드 동기화를 위해서 가장 많이 사용하는 동기화 방법은 크리티컬 섹션일 것이다.
// 크리티컬 섹션 변수
CRITICAL_SECTION cs;
CRITICAL_SECTION cs;
// 크리티컬 섹션 초기화
InitializeCriticalSection(&cs);
InitializeCriticalSection(&cs);
// 공유 리소스를 사용하는 스레드 사용
...
...
// 모든 스레드가 종료된 후 크리티컬 섹션 삭제
DeleteCriticalSection(&cs)
DeleteCriticalSection(&cs)
DWORD WINAPI ThreadProc(LPVOID pParam)
{
...
{
...
// 크리티컬 섹션 소유권 가져오기
EnterCriticalSection(&cs);
EnterCriticalSection(&cs);
// 공유 리소스에 접근
...
...
// 크리티컬 섹션 소유권 해제하기
LeaveCriticalSection(&cs);
LeaveCriticalSection(&cs);
...
}
}