我正在使用.net 3.0。我怎样才能确保线程安全 - AddRange
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));
}
}
答案 0 :(得分:3)
您是否需要生成一个新线程来调用Add2()?
使线程安全的最简单方法是不要仅仅为了调用Add2()而生成一个新线程。
相反,调用Add1()然后使用相同的线程调用Add2()。
答案 1 :(得分:2)
使用锁定语句。
http://msdn.microsoft.com/en-us/library/c5kehkcz(v=VS.100).aspx
EX。 :
Object obj = new Object();
private void Add1()
{
lock(obj)
{
items.AddRange(C1.GetItems(p1, p2));
}
}
private void Add2()
{
lock(obj)
{
items.AddRange(C2.GetItems(p1, p2));
}
}