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 |