我有一個控制檯應用程序,它與另一個用戶界面進行交互。接口發送命令,我的應用程序應該處理它們。在處理和執行命令時,一直聽我的控制檯應用程序很重要。所以我在主線程上監聽接口並在另一個線程中執行命令。已排序執行線程
下面的例子是我正在嘗試和問題是執行線程沒有排序。
第二件事是我在ProcessCommand方法中使用鎖,但我不確定它是否安全。例如,一個線程可以在ProcessCommand方法內,因此一個線程處於鎖定狀態,因此其他線程可以更改傳入輸入值。我對嗎 ?我做了一些測試,但從未發生過,但仍然懷疑它。
什麼是最佳解決方案?解決方案可以是線程化或不線程化。
class Program
{
static object locker = new object();
static void Main(string[] args)
{
while (true)
{
var input = Console.ReadLine();
(new Thread(new ParameterizedThreadStart(ProcessCommand))).Start(input);
}
Console.ReadKey();
}
static void ProcessCommand(dynamic input)
{
lock (locker)
{
Console.WriteLine(input);
//process incoming command
}
}
}
我的鎖實現呢?當另一個線程輸入方法時,傳入的命令可以在鎖中更改 – Freshblood 2010-08-12 18:46:06
@Freshblood:不,它不會改變每個線程正在處理的內容......它只是強制你的線程被序列化 - 每次只有一個線程被激活,使得它首先有多個線程毫無意義。 – 2010-08-12 18:59:06
我喜歡那個網站。多年來我一直在使用它作爲參考。 – 2010-08-12 23:02:30