我有一个字典是Dictionary<int, RSendPacket>
_Packets和有两个主线程。线程#1使用此功能多线程应用程序中的字典(内存管理?)
public void EnqueueOutgoingData(int id, byte[] data)
{
RSendPacket packet = new RSendPacket(data);
_Packets.Add(id, packet);
}
线程#2读取并通过插座在这一点上发送数据包这样
private void _Process(RSendPacket packet)
{
foreach (KeyValuePair<int, RSendPacket> o in _Packets)
{
//Socket send (o.Value >> That's RSendPacket class)
}
}
,我得到一个错误添加分组。我添加“asdf”,但它将其作为“►o”。这是一个线程/内存错误,我认为,但我不能修复它,因为我不知道如何!有人可以帮我解决这个问题吗? (我可以实现C++中的系统指针和内存管理,它应该是由我的坏C#-caused一个内存管理问题)
EDIT1:是的没有一个线程安全的FPGA实现,但我已经尝试过'lock()',并且不起作用!
编辑2:哦另一个重要的编辑。我在Unity中使用C#2.0。所以解决方案应该是一个C#2.0(单声道)代码:/
你在哪里看到“损坏”的值?在'_Process'方法中?如果你只排队和处理一个单一的数据包,它是否有效? (我认为这可以排除多线程问题来确定损坏的原因。) – richaux
另外,您在什么时候从'_Packets'集合中删除发送的数据包? ...并且是传递给具有任何意义的“_Process”的数据包? – richaux