使用std::async而不是手动创buildstd::thread对象的好处之一就是std::async可以在封面下使用线程池来避免超额订阅的问题。 但是,哪些实现这样做? 我的理解是微软的实现,但这些其他的async实现呢? Gnu的libstdc ++ Gnu的libc ++ Just Software的图书馆 升压(对于boost::thread::async ,而不是std::async ) 感谢您提供的任何信息。
我试图深入探讨新的C ++ 11标准的所有选项,同时使用std :: async并阅读它的定义,我注意到了2件事,至less在linux下使用gcc 4.8.1: 它被称为asynchronous ,但它有一个真正的“顺序行为”,基本上在你调用与你的asynchronous函数foo相关联的未来的行中,程序阻塞直到foo执行完成。 它依赖于与其他外部库完全相同的外部库,以及更好的非阻塞解决scheme,这意味着pthread ,如果要使用std::async ,则需要pthread。 在这一点上,我很自然的问为什么selectstd :: async而不是一组简单的函子呢? 这个解决scheme甚至根本就没有规模,你呼叫的未来越多,程序响应也就越less。 我错过了什么吗? 你能否展示一个被授予以asynchronous,非阻塞方式执行的例子?
在使用C ++ 11的线程模型时,我注意到了这一点 std::packaged_task<int(int,int)> task([](int a, int b) { return a + b; }); auto f = task.get_future(); task(2,3); std::cout << f.get() << '\n'; 和 auto f = std::async(std::launch::async, [](int a, int b) { return a + b; }, 2, 3); std::cout << f.get() << '\n'; 似乎做了完全一样的事情。 我明白,如果我用std::launch::deferred运行std::async ,但是在这种情况下有一个主要区别吗? 这两种方法有什么区别,更重要的是,我应该在哪些用例上使用它们呢?