BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Bill McCarthy质问到“迭代器是一种基础性缺陷吗?”

| 作者 Jonathan Allen 关注 595 他的粉丝 ,译者 朱永光 关注 0 他的粉丝 发布于 2008年8月13日. 估计阅读时间: 1 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

迭代器是.NET编程模型的核心。只有很少的开发人员以索引数据的方式工作,很多人都喜欢使用for-each循环来完成大部分任务。但是这种固有地顺序访问方式,在我们大量开发多线程应用程序的时候还适合吗?

Bill McCarthy写到

如果你考虑一下迭代器获取下一个元素的这一主要任务,然后研究一下它是如何工作,你就应该明白它的重要设计缺陷……这个操作不是原子性的。迭代器是IEnumerator或IEnumerator(Of T)的实现,IEnumerator要求你首先调用MoveNext方法然后读取Current属性。如果你允许多线程使用同样的IEnumerator,那么你将得到这样一个调用序列:MoveNext、MoveNext、Current、Current,这样将跳过一个条目而重复下一个条目。所以IEnumerator并没有很好地考虑多线程的情况。这是一个已知的设计限制,但是不仅如此,像C#这样实现自己迭代器的语言还为每个线程生成了不同的迭代器。那就是说,C#不仅认可了这种限制,还加强了它。

Bill继续提到,一种新IEnumerator要如何工作才能正确地支持多线程。

查看英文原文:Bill McCarthy asks “Are Iterators Fundamentally Flawed?”

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT