class ExampleClass {
List<SomeDataType> someData = new List<SomeDataType>();
readonly object dataLock = new object();
public List<SomeDataType> SomeData {
get {
lock (dataLock) {
return someData;
}
}
}
public void ProcessData() {
lock (dataLock) {
foreach (var data in somedata) data.Process();
}
}
public void AddData(List<SomeDataType> newData) {
lock (dataLock) {
someData.AddRange(newData);
}
}
public void SetData(List<SomeDataType> newData) {
lock (dataLock) {
someData = newData;
}
}
}
Code snippet taken from "Common Multithreading Mistakes in C# - IV: Everything Else".