我是新來的多線程,但我不知道什麼是錯我的代碼:C#多線程的邏輯錯誤
public int k;
private void button2_Click(object sender, EventArgs e)
{
k = 10;
ThreadPool.SetMinThreads(2, 6);
ThreadPool.SetMaxThreads(2, 6);
ThreadPool.QueueUserWorkItem(aki);
ThreadPool.QueueUserWorkItem(aki);
}
public void aki(object ab)
{
do
{
this.SetText1(textBox1.Text +
" thread " + Thread.CurrentThread.GetHashCode() +
" valu= " + k + Environment.NewLine);
k--;
} while (k > 0);
if (k < 0) Thread.CurrentThread.Abort();
}
針對上述情況,我得到了以下的輸出:
thread 11 valu= 10
thread 11 valu= 8
thread 11 valu= 6
thread 11 valu= 4
thread 11 valu= 2
thread 10 valu= 0
我在10,9,8,7,6,5,4,3,2,1,0
預期的輸出請指導我對什麼是錯。
我試圖一次運行兩個線程。
怎麼辦?
編輯:羅希特的回答後,我試過,但我得到了以下的輸出:
thread 11 valu= 10
thread 12 valu= 9
thread 12 valu= 8
thread 11 valu= 7
thread 11 valu= 6
thread 6 valu= 7
thread 6 valu= 6
thread 6 valu= 5
thread 13 valu= 3
thread 14 valu= 2
thread 14 valu= 1
在此運行,7和6的重複兩次。
1)永遠不要放棄一池線程 –
2)你'SetText1()'可能是線程 - 安全但即使讀取'textBox1.Text'對於線程來說是不安全的。 –
那麼,我應該使用什麼,而不是中止...? – Aki003