SW/C++

[ C++ ] mutex 개념 및 예제

얇은생각 2018. 11. 16. 14:46
반응형

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


#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를 하나씩 증가시키고 하나씩 출력합니다. 이 때 뮤텍스를 이용하여 동기화합니다. 이전 포스팅에서 한 스레드 예제에서는 임의의 순서대로 실행되었지만 뮤텍스를 활용한 동기화를 통해 하나씩 순서대로 실행되는 것을 알 수 있습니다.

반응형

'SW > C++' 카테고리의 다른 글

C++와 객체 지향에 대해 알아볼까요?  (0) 2018.11.19
[ C++ ] atomic 개념 및 예제  (0) 2018.11.16
[ C++ ] thread 개념 및 예제  (0) 2018.11.16
[ C++ ] chrono 개념 및 예제  (0) 2018.11.16
[ C++ ] foward_list 개념 및 예제  (0) 2018.11.16