2
我正在使用.net 3.0。如何确保线程安全 - AddRange线程在.net中
public class GetItems
{
List<Item> items = new List<Item>();
string p1;
string p2;
public List<Item> Get(string para1, string para2)
{
p1 = para1;
p2 = para2;
ThreadStart ts1 = new ThreadStart(Add1);
ThreadStart ts2 = new ThreadStart(Add2);
Thread th1 = new Thread(ts1);
Thread th2 = new Thread(ts2);
try
{
Monitor.Enter(items);
th1.Start();
th2.Start();
th1.Join();
th2.Join();
}
finally
{
Monitor.Exit(items);
}
return items;
}
private void Add1()
{
items.AddRange(C1.GetItems(p1, p2));
}
private void Add2()
{
items.AddRange(C2.GetItems(p1, p2));
}
}
考虑到对这里的对象的简单锁定会使这两个按顺序运行,这似乎是最好的建议。除非实际的生产方法做得更多,否则根本没有任何意义。也许GetItems需要在后台运行? – 2011-03-15 18:50:17
用不切实际的例子回答一个问题的正确答案。 – 2011-03-15 18:55:17