2009-10-22 5 views

Répondre

5

Si vous lisez juste, vous allez bien. Chaque itérateur sera indépendant des autres.

Si vous êtes déjà demandé pourquoi l'interface IEnumerable<T> n'a pas directement MoveNext() et Current, mais a la place pour créer une instance IEnumerator<T>, c'est pourquoi - la liste elle-même ne tient pas le « curseur » de dire où l'itérateur est, c'est dans le IEnumerator<T>. Le partage des valeurs IEnumerator<T> entre les threads serait presque certainement une mauvaise idée - mais vous avez très peu de chances de le faire accidentellement. La méthode naturelle d'itération sur plusieurs threads aura un IEnumerator<T> par thread, ce qui est sûr (tant que vous ne modifiez pas la liste).

1

Si les valeurs sont statiques, je ne vois pas besoin de verrouillage, mais si elle était toujours de se produire que vous rarement écrivez à l'objet que vous pouvez regarder ReaderWriterLock Classe

0

vous avez besoin de toute évidence une sorte de verrouillage, si à la fois lire et écrire sont impliqués. La meilleure approche consiste à utiliser un verrou en lecture-écriture. voir ReaderWriterLockSlim.

+0

Mais il ne fait aucune écriture;) Donc, il n'y a pas besoin de verrouillage non plus. – pyrocumulus

Questions connexes