[C++] recursive_mutex

Multi Thread 환경에서는 하나의 자원을 여러 thread가 동시에 접근할 수 있어서 그에 따른 문제가 발생할 수 있습니다. 그래서 Multi Thread 환경에서는 “상호배재”를 적용해야 합니다. “상호배재”는 Mutex를 비롯하여 여러 방법으로 적용할 수 있는데, 이전 글에서 정리해 놓았습니다. Semapore, Mutex, Spin-Lock 차이점   c++ 표준 라이브러리 에서는 recursive mutex 기능을 지원합니다. mutex는 mutex lock을 실행한 thread가 자원의…

[C++] lock_guard

c++ 에서 mutex를 lock/unlock 하는 방법은 여러 방법이 있습니다. 기본적으로 C++ 표준 라이브러리의 lock(), unlock() 함수를 호출하여 제어하는 방법이 있습니다. #include <iostream> #include <thread> #include <mutex> std::mutex mtx; void function () { mtx.lock(); std::cout << “thread lock” << ‘\n’; mtx.unlock(); } int main() { std::thread t1(function); std::thread t2(function); t1.join(); t2.join(); } 하지만, 이 경우에는 lock과…

Semapore, Mutex, Spin-Lock 차이점

Spin-lock, Semapore, Mutex는 모두 Thread/Process의 병행성을 보장하기 위한 상호배제 기법(Mutual Exclusion Techniques)이다. 이 셋의 차이점을 한번 알아보자 Mutex 하나의 자원을 통제하는데 사용 된다. 외부 변수를 두어 그 변수의 값을 조정하여(0 or 1) 자원의 접근을 제어한다. 그래서 이진 세마포어(binary semaphore)라고도 불린다. 만약, 임계 구역(Critical Section)이 잠겨있어서 진입을 하지 못하게 되면 풀릴때까지 기다린다. 이 때 문맥 교환(Context Change)이 일어난다….