본문 바로가기

C++/Parallel

[정리 필요] std::async

 

 

std::launch::deferred

=> 비동기 호출을 동일한 스레드에서

=> 반환한 future 의 get() 을 호출 할 때 실행된다.

 

std::launch::async

=> 비동기 호출을 다른 스레드에서

 

 

promise

 

future

 

 

std::async 호출 시, future 를 반환(적절히 템플릿 작성)

 

 

promise 의 get 을 통해 future 를 반환

=> 다른 스레드에서 promise 에 대해서 set_value  혹은 set_value_at_thread_exit() 등을 통해 future 에서 값을 얻도록 할 수 있다

 

wait_for 등을 사용하면 일정시간 동안만 기다릴 수 있다.

=> 현재 태스크의 상태 값등을 확인 할 수 있다.

==> future_status::deferred => so the result will be computed only when explicitly requested (???)

==> future_status::ready  => 결과가 준비 된 상태

==> future_status::timeout => 타임아웃

 

=> 종료 후, get 을 통해 리턴 값을 확인 할 수 있다.

 

 

비동기로 실행 한 태스크를 외부에서 강제로 종료 할 수 있는 방법은 없어 보임.

  • 표준 라이브러리 형태로 제공 하는 것이 없는 듯
  • std::atomic 등을 이용하여, 공유 변수 상태 값을 통해 제어 하는 방식

 

[참조]

'C++ > Parallel' 카테고리의 다른 글

C++ 멀티 스레딩 - 메모리 모델  (0) 2023.10.24