是否有一种可接受的运行线程或顺序执行的方法?

时间:2018-03-14 10:15:37

标签: c++ multithreading boost boost-thread

由于我无法控制的原因,我必须编写代码来执行以下操作:

  • 如果满足条件,请在单独的线程上执行该函数,并等待它在代码中稍后完成。
  • 否则,只需在不使用新线程的情况下调用函数,就可以顺序执行程序。
boost::thread thread;
if (condition)
{
    thread = boost::thread(function);
}
else
{
    function();
}
<some more code here>
thread.join();

有没有比上面代码更好的方法呢?

不幸的是,我对我可以使用的解决方案非常有限,但欢迎任何建议/想法/意见。

3 个答案:

答案 0 :(得分:3)

构建就绪或运行异步任务的未来。

答案 1 :(得分:3)

作为替代方案,std::future<void> fut; if (condition) { fut = std::async(std::launch::async, function); } else { fut = std::async(std::launch::deferred, function); fut.wait(); } // some more code here fut.wait() 可能会有所帮助,例如:

openssl ocsp -issuer AppleWWDRCA.pem -cert mycert.pem -text -url http://ocsp.apple.com/ocsp03-wwdr01 -header 'host' 'ocsp.apple.com' 

答案 2 :(得分:2)

使用期货的另一种看法

std::future<void> fut;
if (condition)
{
    fut = std::async(std::launch::async, function);
}
else
{
    function();
    std::promise<void> prom;
    fut = prom.get_future();
    prom.set_value();
  // or std::experimental::make_ready_future() if avaliable
}
// some more code here
fut.wait()