Pie*_*ine 5 c# multithreading thread-safety
假设我有一个包含的对象A.
// ...
private List<double> someList = new List<double>();
// ...
public List<double> SomeList
{
get { lock (this) { return someList; } }
}
// ...
Run Code Online (Sandbox Code Playgroud)
在下面的代码中对列表执行操作是否是线程安全的.知道几个操作可以由不同的线程同时执行.
A.SomeList.Add(2.0);
Run Code Online (Sandbox Code Playgroud)
要么
A.SomeList.RemoveAt(0);
Run Code Online (Sandbox Code Playgroud)
换句话说,什么时候锁被释放?
您在问题中显示的锁定没有多大用处.
要使列表操作线程安全,您需要实现自己的Add/Remove/etc方法,包装列表中的那些.
public void Add(double item)
{
lock(_list)
{
_list.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
此外,最好将列表本身隐藏在类的消费者中,即将字段设为私有.
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |