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