我有一個字典是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