使用std :: future and std ::通过非std ::螺纹承诺安全吗?
Is it safe to use std::future and std::promise with non std::thread?
特别是我想与boost::asio::thread pool
一起使用它们。它似乎一见钟情,但我有疑问。
进行澄清:我知道std::thread
基于boost :: thread,但是由于某些原因,asio::thread_pool
正在使用其自己的线程实现。
我使用std::future
和std::promise
进行中断和用户代码的完成状态的线程信号。
您在问题中提到的所有"线程"实现都是同一事物的模型:目标操作系统的线程。
只要填充std::promise
的代码最终可以到达那里,您就可以在std::future
上等待。这两个都没关系,它们如何启动的操作系统启动。
std::thread
是基于boost版本的 heem :因此它将100%起作用。
通常,它应该与所有其他版本的线程一起使用。future
和promise
由于内存模型而进行的工作以及线程的实际实现对它们而言并不重要。
我唯一能想象的问题是,承诺未正确传递到线程中,但这只是一个编码错误,每次都会导致故障。
我不知道我们是否可以独立回答这个问题,所以让我们看看与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过渡的用户应该发现自己 非常在家。
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用一个考虑到std::map中键值的滚动或换行的键
- 如何从 std::atomic 中提取指针 T<T>?
- STD ::承诺外部代码,异步取消
- 使用std :: future and std ::通过非std ::螺纹承诺安全吗?
- 如何通过std ::承诺进入线程?由STD :: Move或STD :: Shared_ptr