promise / future

만드는 쪽은 promise, 기다리는 쪽은 future를 잡는다

두 객체는 같은 공유 상태를 바라봅니다. 값이나 예외는 한 방향으로 전달되고, `future.get()`은 그 결과가 준비될 때까지 기다립니다.

Producer thread

std::promise<T>

나중에 값을 준비하는 소유자입니다.

결과 확정

set_value() set_exception()

둘 중 하나로 공유 상태를 ready로 만듭니다.

shared state 값, 예외, ready 상태를 보관하는 단일 통로

Consumer thread

std::future<T>

결과를 기다리는 손잡이입니다.

수신

get()

준비 전이면 블록하고, 준비 후에는 값을 한 번 가져옵니다.

단방향 전달

promise가 쓰고 future가 읽습니다.

move-only

소유권이 명확해야 하므로 복사하지 않습니다.

broken promise

값 설정 없이 promise가 사라지면 future는 예외를 받습니다.