我有一个字典,它是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#引起)
EDIT1:是的,没有线程安全的实现,但是我已经用'lock()'尝试过了,但是没有用!
EDIT2:哦,另一个重要的编辑。我在Unity中使用C#2.0。所以解决方案应该是C#2.0(单声道)代码:/
真正的解决方案(我已经尝试过并且可行)是l3arnon的答案,但是我将在C#2.0中实现该系统,并且已经使用Monitor像这种方法一样实现了它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句