C#如何處理多個線程同時調用一個方法
3 回答

白衣染霜花
TA貢獻1796條經驗 獲得超10個贊
要同一時間使方法只受到一個線程訪問只需加線程鎖,例如:
void f()
{
lock(this)
{
// your code here
}
}
但是你說需要排隊的話那是另外一個問題,因為線程競爭鎖是沒有序的,極端情況是,永遠有一個線程爭不到鎖。
這時你需要一個隊列,來保證你線程的請求是有序的!
例如:
List<Action> actions = new List<Action>();
actions.Add(()=>{/* your code here */});
...
另一線程就不斷從這個隊列內讀取請求然后執行,這樣必須執行方和使用方一起改動。

米脂
TA貢獻1836條經驗 獲得超3個贊
最簡單的方法,把這個變量加鎖,或者把函數方法加鎖,使其同一時間只能被一個線程調用。
但這樣犧牲了效率,所以首先你還是得思考以下問題:
1.這個變量值會被其他線程改變嗎?
如果1的回答是否定的,那么線程之間應該不會受影響
如果是肯定的,思考問題:
2.一定要在其他線程中改變這個變量嗎?
如果是否定的,考慮使用臨時變量或者局部變量代替原變量
如果肯定的,還是考慮加鎖吧
- 3 回答
- 0 關注
- 4408 瀏覽
添加回答
舉報
0/150
提交
取消