BT

Bill McCarthy氏が問う。「基本的にイテレーターは欠陥があるのか?」

| 作者: Jonathan Allen フォローする 594 人のフォロワー , 翻訳者 編集部 フォローする 0 人のフォロワー 投稿日 2008年8月8日. 推定読書時間: 1 分 |

イテレーターは、.NETプログラミングの中核である。実際にデベロッパは索引付きデータに対して作業することは極めてまれであり、たいていの作業で for-each ループを好んで使用している。しかし、ますますマルチスレッドアプリケーションに頼りつつある中で、本質的にこのシーケンシャアクセス方式は適切なのか?

Bill McCarthy(リンク)は以下のように書いている。

イテレーターの主なタスクを次のエレメントの取得であると考えているならば、それをおこなう様子を見てみるとよい。決定的な設計上の欠陥Iがあることに気 づくだろう。操作はアトミックではない。イテレーターの実装はIEnumeratorもしくはIEnumerator(Of T)であり、そしてIEnumeratorはまず最初にMoveNextを呼び出し、Currentプロパティを読み取ることを要求する。複数のスレッドが同一のIEnumeratorを使用することを許可すると、MoveNextMoveNext、 Current、Currentのような呼び出しシーケンスがあり、1つの項目をスキップし、次を繰り返す。そういうわけで、IEnumeratorはス レッドには適さない。これは良く知られた設計上の制限であるが、それに対処するよりもC#のような言語がそれぞれのイテレーターを実装して、スレッドごと に別々のイテレーターになるようにした。それが、制限を認識しているだけでなく、それを実施している理由である。

Bill氏は、複数のスレッドを適切にサポートするために、新たなIEnumeratorがどのようにして動作すべきかについて、注釈をつけている。

原文はこちらです:http://www.infoq.com/news/2008/08/Iterators-Flawed

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT