promise / future

작업 시작과 결과 수신을 분리한다

생산자 스레드는 결과를 채우고, 소비자 스레드는 같은 공유 상태에서 결과가 준비될 때까지 기다린다.

Producer thread

  • 작업 실행계산, I/O, 긴 처리 등을 별도 스레드에서 수행한다.
  • 결과 저장promise.set_value(result)
  • 예외 전달promise.set_exception(...)

Consumer thread

  • 미래 결과 보관std::future<T>
  • 필요한 시점에 수신future.get()
  • 한 번만 소비get() 이후 같은 future는 다시 읽지 않는다.
상황 future 동작 주의점
값 준비 전 get()이 기다림 UI/메인 스레드에서 무작정 기다리면 멈춘 것처럼 보인다
예외 저장 get()에서 다시 던짐 생산자 쪽 오류를 소비자 쪽에서 처리해야 한다
결과 재사용 shared_future 필요 일반 future는 단일 소비 모델이다