Mai*_*ein 5 c++ multithreading
void
set_string(std::promise<std::string>& p)
{
p.set_value("set from thread");
}
int
main()
{
std::promise<std::string> p;
std::future<std::string> f = p.get_future();
std::thread t(&set_string, std::ref(p));
std::cout << f.get() << std::endl;
t.join();
}
Run Code Online (Sandbox Code Playgroud)
我打电话t.join()后为什么需要打电话f.get()?我认为这f.get()将阻止主线程,直到它可以得到结果,这将意味着线程已经完成.
因为即使线程完成执行后它仍然是可连接的。您可以调用detach以允许独立执行。在这种情况下,您可能希望使用set_value_at_thread_exitmember ofpromise来减少main在线程之前完成的机会:
#include <iostream>
#include <string>
#include <thread>
#include <future>
void set_string(std::promise<std::string>& p)
{
p.set_value_at_thread_exit("set from thread");
}
int main()
{
std::promise<std::string> p;
std::future<std::string> f = p.get_future();
std::thread(&set_string, std::ref(p)).detach();
std::cout << f.get() << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
http://coliru.stacked-crooked.com/a/1647ffc41e30e5fb