私はスレッド初心者で、C# (.NET 3.5 SP1) でカスタム スレッド セーフ ジェネリック リスト クラスを作成しようとしています。私は読んだことがありますなぜスレッドセーフなコレクションはとても難しいのですか? . クラスの要件を確認した後、リストに安全に追加してリストを返すだけでよいと思います。この例は、リターンリストメソッドがないことを除いて、私が望むほとんどすべてを示しているため、以下のように独自のパブリックメソッドを作成しました:
更新:提案に基づいて、要件を確認したため、クラスを以下のように単純化しました。
public sealed class ThreadSafeList<T>
{
private readonly IList<T> list = new List<T>();
private readonly object lockable = new object();
public void Add(T t)
{
lock (lockable)
{
list.Add(t);
}
}
public IList<T> GetSnapshot()
{
IList<T> result;
lock (lockable)
{
result = new List<T>(list);
}
return result;
}
}