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 |
---|