Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

Code Habit

[c++] std::mutex를 사용하여 공유데이터 동기화 하기 본문

카테고리 없음

[c++] std::mutex를 사용하여 공유데이터 동기화 하기

코드베어 2024. 2. 3. 12:14

여러 쓰레드에서 공유되는 데이터에 대해 동시에 접근하는 것을 방지하기 위해 std::mutex를 사용할 수 있다.

#include <vector>
#include <mutex>

int g_shared_data = 0;

std::mutex g_mtx;

void IncrementSharedData()
{
    // 스코프 기반 락 관리
    std::lock_guard<std::mutex> lock(g_mtx);
    
    g_shared_data++;
}

int main()
{
    std::vector<std::thread> threads;
    
    // 10개의 쓰레드 생성 및 실행
    for(int i=0; i < 0; i++)
    {
        threads.emplace_back(IncrementSharedData);
    }
    
    // 모든 쓰레드가 종료될때까지 기다림
    for(auto& thr : threads)
    {
        thr.join();
    }
    
    std::cout << "Final value of sharedData is " << sharedData << std::endl;
    
    return 0;
}

std::lock_guard<std::mutex>를 사용하여 스코프 기반으로 동기화 관리를 할 수 있다. 특정 영역을 동기화 처리하려면 g_mtx.lock(), g_mtx.unlock() 함수로 감싸주면 된다.

 

emplace_back() 함수로 쓰레드 생성과 동시에 실행할 수 있다. 이 때 인자로 쓰레드 함수 (IncrementSharedData)를 넘겨주고 있다.

 

thr.join() 함수로 쓰레드가 종료될 때까지 대기한다.