뮤텍스는 스레드로 동시에 여러 개를 처리할 떄 모든 스레드가 접근하는 데이터를 하나의 스레드가 먼저 사용할 수 있도록 독점적으로 자원을 가져다 사용할 수 있도록 해주는 방법입니다. 자세한 내용은 다음에 기회가 된다면 운영체제 관련 포스팅을 진행해보도록 하겠습니다. 관련 예제에 대해 알아보겠습니다.


#include <iostream>
#include <map>
#include <string>
#include <chrono>
#include <thread>
#include <mutex>
using namespace std;
 
int value;
mutex value_mutex;
 
void increase_value()
{
    // 뮤텍스를 이용하여 동기화
    value_mutex.lock();
    value++;
    cout << value << endl;
    value_mutex.unlock();
}
 
int main()
{
    value = 0;
    thread t[10];
 
    for (auto i = 0; i < 10; i++)
    {
        // 스레드 생성
        t[i] = thread(increase_value);
    }
 
    for (int i = 0; i < 10; i++)
    {
        // 스레드 대기 종료
        t[i].join();
    }
}
 
cs




스레드를 10개를 생성하고 스레드로 실행키는 함수인 increase_value() 함수에서 전역 변수 value를 하나씩 증가시키고 하나씩 출력합니다. 이 때 뮤텍스를 이용하여 동기화합니다. 이전 포스팅에서 한 스레드 예제에서는 임의의 순서대로 실행되었지만 뮤텍스를 활용한 동기화를 통해 하나씩 순서대로 실행되는 것을 알 수 있습니다.


출처 https://jjeongil.tistory.com/154?category=686124


'Thread' 카테고리의 다른 글

Mutex example01  (0) 2019.01.27
[ C++ ] thread 개념 및 예제  (0) 2019.01.26
[12편-2] Modern C++ 정리: thread  (0) 2019.01.26
1.Modern C++ 정리: thread (펌)  (0) 2019.01.26

+ Recent posts