boost::asio: “strand”类型的同步原语有啥名字吗?

Posted

技术标签:

【中文标题】boost::asio: “strand”类型的同步原语有啥名字吗?【英文标题】:boost::asio: Is there any name for the "strand" type of synchronization primitive?boost::asio: “strand”类型的同步原语有什么名字吗? 【发布时间】:2013-08-22 15:11:54 【问题描述】:

boost::asio 库提供了一个有趣的同步模型,它使用“链”来序列化对通常需要锁的资源的访问。这通过本质上将每个锁定操作变成一个队列来增加并行度。

搜索“strands”只会产生关于 asio 的相关结果,尽管它们看起来是一个非常有用的多线程原语。是否还有其他我想念的术语?

到 asio 链文档的链接:http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/reference/io_service__strand.html

【问题讨论】:

【参考方案1】:

我不知道该构造的正式名称。

基于 Boost.Asio (N2175 - Networking Library Proposal for TR2) 的提案记录了strand 类,但没有引用任何相关材料。此外,英特尔编译器文档在其执行模型中对strand 进行了一些引用,将其定义为“没有任何并行控制结构的任何指令序列”。

【讨论】:

【参考方案2】:

我已经开始在 ios 和 Mac OS X 领域进行一些编程,它们与 serial dispatch queue 中的 Grand Central Dispatch 的链具有相似的概念。任务按照它们添加到队列中的顺序执行,就像一个链一样。同样,执行任务的线程也没有定义,就像asio在多个线程调用io_service::run()时一样。

【讨论】:

以上是关于boost::asio: “strand”类型的同步原语有啥名字吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用 boost::asio 时每个连接都需要 strand?

Boost Asio总结class strand

boost::asio::strand 在 Ubuntu 11.04 (boost_all_dev 1.42) 上是不是损坏

boost.asio中使用协程

Boost.Asio 的同步和并发数据结构模式

asio::strand<asio::io_context::executor_type> vs io_context::strand