상세 컨텐츠

본문 제목

condition_variable에 대해서

똑똑한 개발/C++

by 성댕쓰 2021. 5. 29. 17:56

본문

condition_variable 언제 씀?

  • 스레드간 통신 원할 때
    • ex) 특정조건을 만족할 때까지 스레드를 블록하고 싶을 때.

사용방법

  • condition_variable:: wait, notify_one, notify_all 메서드를 이용
  • 다른 스레드가 일을 처리할 때까지 기다리게 할 수 있다.
  • wait 을 사용하기 위해서는,
  • 스레드가 먼저 mutex 를 점유해야 한다.
  • notify_… 함수를 호출하면 wait 하고 있는 조건변수에 알린다.
  • 그러면 해당 스레드가 깨어난다.
condition_variable condition_value;
bool flag = false;
boost::mutex some_mutex;

void worker()
{
    {
        std::this_thread::sleep_for(std::chrono::seconds(30));
        unique_lock<boost::mutex> lock(some_mutex);
        flag = true;
    }

    condition_value.notify_all();
}

int main()
{
    boost::thread th1(worker);
    unique_lock<boost::mutex> lock(some_mutex);
    if(!flag)
    {
        condition_value.wait(lock);
    }

    th1.join();
}

'똑똑한 개발 > C++' 카테고리의 다른 글

enable_shared_from_this  (0) 2022.04.22
lvalue, rvalue 알아보자  (0) 2021.05.29
더블포인터에 대해서  (0) 2021.05.29
정적라이브러리, 동적라이브러리 비교  (0) 2021.05.29
extern C 의 의미와 활용  (0) 2021.05.29

관련글 더보기

댓글 영역