设为首页 加入收藏

TOP

10.3.4 原子整型操作:尾声
2013-10-07 15:05:40 来源: 作者: 【 】 浏览:87
Tags:10.3.4 原子 操作 尾声

10.3.4  原子整型操作:尾声

在这一章中我花了很大的篇幅来讨论原子操作,对此我并不感到有何不妥。理由有3点:首先,我认为它们可以被直接合并到C++(www.cppentry.com)之中,而其他多线程和同步构造则不能如此,因为它们之间具有极大的差异性,且缺乏广泛的可用性。1

其次,它们是极其有用的构造,其威力与简单性成反比。仅仅使用原子整型操作,我们就可以在大量的C++(www.cppentry.com)类中实现大多数乃至所有被要求的线程安全性,在后面的章节中我们将会看到这一点。

最后,退一步说,在这方面的著作中对原子操作的讨论还不够。我希望通过这里的讨论能够让你时常想起它们。

原子操作在许多平台上都是可用的,或者作为系统库函数,或者作为非标准库,甚至你还可以编写自己的汇编版本(我曾见过一本书,其内容很大程度上展示高级C++(www.cppentry.com)技术,但具有讽刺意味的是,该书的目的却是促进对汇编语言的运用。世界真奇妙)。

即使是在我们选择使用互斥体(通常是PTHREADS)来实现原子操作时,同样有一些措施可以用于提高效率。需要注意的一点是,不要在这种情况下使用自旋互斥体。可能会出现这么一种情况:你使用了某个互斥体类的若干实例,该互斥体类是基于一个原子整型API实现的,而后者又是基于一个或几个全局互斥体来实现的。在这种情况下,你应该使用预处理来确保你选择的互斥体是(基于PTHREADS的)简单互斥体,否则会给性能带来消极影响,因为这可不是你想要或期望的。

这是关于在多线程开发中发现更广泛的真理的一个绝好的例子。在实践中,我们确实需要考虑同步需求以及应用程序所运行的宿主系统设施的细节。要是C++(www.cppentry.com)支持原子操作就好了,但是就我个人看来,提供一个标准化的高阶同步原语,1同时在不同架构上仍维持最大的效率是非常困难的。通常,你只要了解并灵活运用手头的多线程工具就可以很好地完成任务([Bute1997, Rich1997])。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇10.1 对整型值的同步访问 下一篇10.3.2 运行期按架构派发

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: