CULRRY.NET

Back

C++ 멀티스레드 프로그래밍
목록 보기 2/2
  1. 1. 스레드의 생성과 종료(_beginthreadex, _endthreadex 소스코드 분석)
  2. 2. 스레드 동기화 기초 (Mutex, Semaphore)

스레드 동기화란?#

여러 스레드가 동시에 실행될 때, 공유 자원에 대한 접근을 제어하는 것을 스레드 동기화라고 합니다.

Mutex#

Mutex(Mutual Exclusion)는 상호 배제를 의미하며, 한 번에 하나의 스레드만 임계 영역에 접근할 수 있도록 합니다.

Semaphore#

Semaphore는 동시에 접근 가능한 스레드의 개수를 제한할 수 있습니다.

예제 코드#

#include <windows.h>
#include <iostream>

HANDLE g_mutex;

DWORD WINAPI ThreadFunc(LPVOID param) {
    WaitForSingleObject(g_mutex, INFINITE);

    // Critical section
    std::cout << "Thread " << GetCurrentThreadId() << std::endl;

    ReleaseMutex(g_mutex);
    return 0;
}

int main() {
    g_mutex = CreateMutex(NULL, FALSE, NULL);

    HANDLE threads[5];
    for (int i = 0; i < 5; i++) {
        threads[i] = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
    }

    WaitForMultipleObjects(5, threads, TRUE, INFINITE);

    CloseHandle(g_mutex);
    return 0;
}
cpp

다음 시리즈#

다음에는 더 고급 동기화 기법들을 알아보겠습니다.

스레드 동기화 기초 (Mutex, Semaphore)
https://culrry.net/ko/blog/test2/
Author CULRRY
Published at February 15, 2024