서버

std::future

yeonii_ 2025. 4. 8. 18:04

std::future란?

비동기 작업의 결과를 전달하기 위한 객체로, std::async, std::promise, std::packaged_task와 함께 사용된다.

단순한 애들을 처리할 때 혹은 한번 발생하는 이벤트에 사용할 때 유용하다.

 

std::async

int Calculate()
{
    int sum = 0;
    for(int i = 0; i< 100000; ++i)
        sum += i;
    
    return sum;
}

int main()
{
    std::future<int> future = std::async(std::launch::async, Calculate);
    
    std::future_status status = future.wait_for(1ms);
    if(status == future_status::ready)//준비완료 확인
    {
    
    }
    int sum = future.get();
}

 

 

std::promise

void PromiseWorker(std::promise<string>&& promise)
{
    promise.set_value("message");
}

int main()
{
    std::promise<string> promise;
    std::future<string> future = promise.get_future();
    
    thread t(PromiseWorker, std::move(promise));
    string message = future.get();
    cout << message << endl;	//message출력
    
    t.join();
}

한 스레드에서 값을 설정하고 다른 스레드에서 future를 통해 get할 수 있는 스레드 통신도구이다.

 

 

std::packaged_task

void TaskWorker(std::packaged_task<int(void)> && task)
{
    task();
}

int main()
{
    std::packaged_task<int(void)> task(Calculate);
    std::future<int> future = task.get_future();
    
    std::thread t(TaskWorker, std::move(task));
    int sum = future.get();
	
    t.join();
}

함수 혹은 함수 객체를 감싸 나중에 실행했을 때 결과를 future로 받아올 수 있도록 해주는 실행 패키지이다.

'서버' 카테고리의 다른 글

조건 변수 Condition Variable  (0) 2025.04.08
DeadLock과 Lock구현  (0) 2025.04.07
스레드와 멀티스레드  (1) 2025.04.05