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::strand 在 Ubuntu 11.04 (boost_all_dev 1.42) 上是不是损坏
asio::strand<asio::io_context::executor_type> vs io_context::strand