mercredi 25 février 2015

Concurrent collections, should read methods allow multiple threads at one time?

I have custom collection and I want to add wrapper to allow concurrent access.



public class MyConcurrentCollection<T>
{
private MyCollection _collection; // passed in constructor

public void Add(T item)
{
//modifies and may temporarily "break" the collection while executing this method
}

public bool Contains(T item)
{
//only reads
}

// other read and write methods
}


At this moment, I have object private member that acts as lock in every method, allowing only one thread at a time to access the collection, so every method looks like this:



public bool Contains(T item)
{
lock(_lock)
{
return _collection.Contains(item);
}
}


However this seems really inefficient. Since Contains() only reads from the collection, should I allow multiple threads into it?


Of course, I need to lock access to Add() and other methods while there are threads in Contains() and I need to block access to Contains() if there is a thread wishing to modify the collection.


Is there any disadvantage of allowing multiple threads into read only methods, or should I stick with my basic solution?


Aucun commentaire:

Enregistrer un commentaire