-2
Public void example(int a,int b)
{
int d=a;
int w, c;
ThreadPool.GetMinThreads(out w, out c);
ThreadPool.SetMinThreads(100, c);
ThreadPool.QueueUserWorkItem(new WaitCallback(method), d);
}
Public void method(object d)
{
console.Writeline(d);
}
問題:當一個線程進入example()時,它將自己的值賦給一個分配給c的值。線程進入語句ThreadPool.QueueUserWorkItem(new WaitCallback(method), d)
時,新線程輸入example(),並修改c的值。因此第一個線程也會將修改後的值d發送到method()
。結果兩個線程都打印出相同的值d
。使可變線程安全
要求:我想每個線程都保存自己的d值,第二個線程進入method()
不應該修改d的第一個線程值。我知道'鎖(obj)'可以是一個選項。建議我在這種情況下鎖定一些好方法,並用其他方法來達到我的要求。 注意:考慮線流量較高。
不,它不。曾經調用過的方法將具有在其ThreadPool.QueueUserWorkItem時出現的c的值。他們不會分享c的「單一」值。 – xanatos
我編輯了文字。請回答。 – Rajesh
@HansPassant這甚至不會編譯。兩個局部變量'c' :( –