我可以在這裏獲得社區的意見。我有一個應用程序,其中有多個線程訪問(this)類的成員,該類調用線程本身。問題是,當新線程在LinkedList成員中添加一個元素時,我可以看到LinkedList的count由於添加了元素而增加到1,但是在主線程中,新線程所做的更改沒有反映出來。我甚至將當前對象的引用傳遞給了ParameterizedThreadStart,但它仍然不起作用。會員的多個線程更改不反映在主線程中
插圖:
ParameterizedThreadStart^ pReceiveProc = gcnew ParameterizedThreadStart(this, &ActualClass::Receive);
Thread^ pReceiveThread = gcnew Thread(pReceiveProc);
pReceiveThread->Start(this); // passed the current instance
線程方法:
void Receive(Object^ pObj) {
ActualClass^ l_Cls = dynamic_cast<ActualClass^>(pObj);
l_Cls->MyLinkList->AddLast("test");
Console::WriteLine("{0}", l_Cls->MyLinkList->Count); //outputs 1
}
但如果我從主線程訪問MyLinkList:
void MethodMainThread(){
Console::WriteLine("{0}", MyLinkList->Count); //outputs 0
}
靜態成員解決方案不是一個選項。
在MethodMainThread()的上下文中,您確定變量l_Cls仍然引用您傳遞給其他線程的同一個列表嗎? – 2013-03-11 05:45:27
是的,因爲我一直通過主線程的「this」引用,所以我編輯了我的帖子,MethodMainThread沒有l_Cls,因爲它是主線程,所以它應該直接訪問MyLinkList – TravellingGeek 2013-03-11 05:47:06
什麼你的主程序看起來像什麼?你是否在插入元素後真的檢查計數?並知道LinkedList是不是線程安全的,所以使用鎖 – 2013-03-11 05:51:55