多个线程对一个成员的修改不会在主线程中反映出来
本文关键字:线程 一个 成员 修改 | 更新日期: 2023-09-27 18:03:20
我可以听听社区的意见吗?我有一个应用程序,其中有多个线程访问(this)类的成员,这个类调用线程本身。问题是,当新线程在LinkedList成员中添加元素时,我可以看到LinkedList的计数由于添加元素而增加到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
}
最有可能的是,你的次级线程被抢占了,主线程检查count,然后次级线程添加一个对象,尝试使用信号,让主线程等待直到次级线程完成它的操作。
你不能像那样在线程之间共享数据。一个简单的方法是使用'lock'语句。这是相当直接的,这里有一个很好的解释。