본문 바로가기
C++

std::condition_variable

by 냉동커피 2021. 7. 12.

<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