所以我看到好玩东西在玩线程。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之间共享某些值(引用)。向我们展示填充它们的代码。 –