J'ai un objet qui contient une collection d'éléments. Je souhaite pouvoir ajouter des éléments à la collection via une méthode AddItem et également parcourir tous les éléments de la collection. Mon objet doit être thread safe. J'utilise un ReaderWriterLockSlim pour assurer une synchronisation correcte. Comment synchroniser la méthode GoThroughAllItems? Dois-je commencer un grand ReadLock pendant toute sa durée, qui peut être très longue, ou devrais-je libérer le verrou pour chaque élément récupéré de la collection, et ré-acquérir le verrou pour le prochain?Synchroniser Lire la collection d'écriture dans .NET
Voici quelques exemples de code:
private ReaderWriterLockSlim @lock = new ReaderWriterLockSlim(); private List items = new List(); public void AddItem(Item item) { [email protected](); try { //do something with item and add it to the collection this.items.Add(item); } finally { [email protected](); } } public void GoThroughAllItems() { [email protected](); try { foreach (Item item in this.Items) { #if option2 [email protected](); #endif //process item, which may take a long time #if option2 [email protected](); #endif } } #if option2 catch #endif #if option1 finally #endif { [email protected](); } }
Merci, mais, en général, je pense que la copie peut être trop chère à considérer. –
@Ricardo Peres cher en termes de quoi? – Andrey
En termes de devoir copier N éléments d'un côté à l'autre, bien sûr. –