<Synchroniztion primitive>
- 프로세스 및 스레드에 동기화를 지원하는 소프트웨어 기법으로, atomic operations, memory barriers, spinlocks, context switches 와 같은 lower-level 기법들로 구현된다.
<condition_variable class>
- 이 클래스는 synchronization primitive라고 하는 동기화 기법을 지원하는 클래스로, 여러 스레드를 동시에 블럭시킬 수 있어 스레드 내에 존재하는 critical section에 대해 동기화가 가능하다.
- 블럭이 풀리는 특정 조건을 지정할 수 있어서 busy-wait를 대체하는 데에도 사용 가능하다.
< 동작 >
- critical section내 동작을 수행하는 스레드
1. std::lock_guard<std::mutex> lk(mutex); // std::mutex을 얻는다. ( 주로 lock_guard 사용 )
2. condition = true; // 그 동안에 원하는 동작을 수행하고 특정 조건을 만족시킨다.
3. cv.notify_one(); // 기다리는 스레드 중 하나에 알린다.
- 기다리는 스레드
1. std::unique_lock<std::mutex>(mutex) // 같은 mutex를 얻는다.
2. cv.wait(); // wait 함수를 실행시키면 lock이 자동으로 풀리고 블럭된다.
3. 다른 스레드로부터 notify를 받으면 특정 조건을 확인하고 만족할 경우 블럭이 해제된다.
'C++' 카테고리의 다른 글
Value categories (0) | 2021.09.15 |
---|---|
객체 지향 프로그래밍( Object Oriented Programming ) (0) | 2021.06.27 |
C++ 스타일 캐스팅( 형변환 ) (0) | 2021.06.24 |