所以我看到好玩東西在玩線程。c#線程同步問題
我有一個方法,啓動2個線程並繼續其生活,我試着做以下事情以保持安全。
bool CopyOk1 = false;
bool CopyOk2 = false;
new Thread(() => FirstMethod(tempList1, ref CopyOk1)).Start();
new Thread(() => SecondMethod(tempList2, ref CopyOk2)).Start();
var spinner = new SpinWait();
while (!CopyOk1 || !CopyOk2)
spinner.SpinOnce();
然後在這兩種方法我開始用下面的
private static void FirstMethod(List<T> templist, ref bool CopyOk)
{
var temp = new T[templist.Count];
templist.CopyTo(temp);
CopyOk = true;
//moves on
}
我在這裏的目的是要複製傳遞的列表,以便我可以改變和安全地使用線程內儘快疏通調用程序線程。
我的問題是,在第二種方法不可預知的情況下,數組初始化和列表CopyTo基本列表之間的變化,不知何故,通過某些東西。
這些列表程序線程內創建,並沒有實際使用後的線程開始,所以我絕對NO知道如何/爲什麼發生這種情況。
毫無疑問,我在這裏做錯了什麼,但我的高超技巧不會讓我看到,任何幫助表示讚賞。
你可以添加上面定義和分配tempList1&2的代碼嗎? – bryanmac
我相信@ bryanmac完全釘了它。 templist的來源可以在templist定義後修改。 –
您似乎很有可能在兩個tempLists之間共享某些值(引用)。向我們展示填充它們的代碼。 –