[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과…

spinlock 종류, 차이점

  Semapore, Mutex, Spin-Lock 차이점은 다음 글에 정리되어 있다.   Spin-Lock의 종류를 알아보자. * spin_lock_irqsave()와 spin_lock_irq() 둘다 interrupt를 disable 시킨 이후에 spin lock을 획득하는 것은 동일하지만, spin_lock_irqsave()는 CPU의 flag 레지스터를 보관했다가 spin_unlock_irqrestore()로 복구할 수 있다. * spin_lock()과 spin_lock_irq()의 차이는 spin_lock()은 interrupt를 disable하지 않기 때문에 interrupt handler(top half)에서는 사용할 수 없다. 대신 이때는 spin_lock_irq()나 spin_lock_irqsave()를 사용해야…