我特别想将它们与boost::asio::thread pool
一起使用。乍一看似乎可行,但我对此表示怀疑。
为澄清起见:
我知道std::thread
是基于boost :: thread的,但是asio::thread_pool
使用它自己的线程实现是出于对我不明显的某些原因。
我使用std::future
和std::promise
进行用户代码中断和完成状态的线程间信令。
答案 0 :(得分:2)
您在问题中提到的所有“线程”实现都是同一对象的 models :目标操作系统的线程。
只要填充std::promise
的代码最终可以到达那里,您就可以等待std::future
。对于这两个无关紧要,它们是如何启动的操作系统线程是如何启动的。
答案 1 :(得分:0)
std::thread
是重载,基于boost版本:因此可以100%使用。
通常,它应该与所有其他版本的线程一起使用。 future
和promise
因内存模型而起作用,线程的实际实现对其并不重要。
我能想象的唯一问题是诺言没有正确地传递到线程中,但这只是一些编码错误,每次都会导致失败。
答案 2 :(得分:0)
我不知道我们是否可以自己确定地回答这个问题,所以让我们看看使用Boost和标准库的专家不得不说。
曾是Boost Thread库的主要开发者和维护者的Anthony Williams在他的书"C++ Concurrency in Action"(C++ Definitive Books list中的其中一本书)中说了这一点:
Boost Thread库提供了基于C ++ 11标准的API 线程库建议书,可移植到许多平台。大多数例子 可以明智地修改本书中的内容以使其与Boost Thread Library一起使用 将
std::
替换为boost::
,并使用适当的#include
指令。 有一些设施不被支持(例如std::async
)或具有 Boost Thread库中的其他名称(例如boost::unique_future
)。新的C ++线程库很大程度上基于先前积累的经验 通过使用前面提到的C ++类库。尤其是, Boost线程库已用作新模型的主要模型 库是基于库的,许多类与它们共享名称和结构 Boost对应的随着新标准的发展,这已经成为 双向流,Boost Thread Library本身也进行了更改以匹配C ++ 在很多方面都是标准的,因此从Boost过渡的用户应该会发现自己 非常在家。