使用std :: future and std ::通过非std ::螺纹承诺安全吗?

Is it safe to use std::future and std::promise with non std::thread?

本文关键字:std 承诺 安全 future and 使用      更新时间:2023-10-16

特别是我想与boost::asio::thread pool一起使用它们。它似乎一见钟情,但我有疑问。

进行澄清:我知道std::thread基于boost :: thread,但是由于某些原因,asio::thread_pool正在使用其自己的线程实现。

我使用std::futurestd::promise进行中断和用户代码的完成状态的线程信号。

您在问题中提到的所有"线程"实现都是同一事物的模型:目标操作系统的线程。

只要填充std::promise的代码最终可以到达那里,您就可以在std::future上等待。这两个都没关系,它们如何启动的操作系统启动。

std::thread是基于boost版本的 heem :因此它将100%起作用。

通常,它应该与所有其他版本的线程一起使用。futurepromise由于内存模型而进行的工作以及线程的实际实现对它们而言并不重要。

我唯一能想象的问题是,承诺未正确传递到线程中,但这只是一个编码错误,每次都会导致故障。

我不知道我们是否可以独立回答这个问题,所以让我们看看与Boost和Standard Library合作的专家必须说。

安东尼·威廉姆斯(Anthony Williams)是Boost Thread Library的主要开发商和维护者的说法,他的书《 C 的行动中的C 并发》(C 最终书籍列表中的一本书)说:

增强线程库提供了基于C 11标准的API 线程库的建议,可移植到许多平台上。大多数示例 可以通过明智地修改本书以与Boost线程库一起使用 用boost::替换std::并使用适当的#include指令。 有一些不支持的设施(例如std::async)或 Boost线程库中的不同名称(例如boost::unique_future)。

新的C 线程库是根据累积的先前经验而大大的 通过使用前面提到的C 类库。尤其, Boost线程库已被用作新的模型 库是基于的,许多课程都与 来自Boost的相应。随着新标准的发展,这是一个 双向流动,增强线程库本身已更改以匹配C 在许多方面的标准,因此从Boost过渡的用户应该发现自己 非常在家。