我有一个每秒不断更新的数组列表。我必须在另外两个线程中使用相同的数组列表并制作它的本地副本。我已经完成了所有这些,但是我得到了 index out of bound 的奇怪异常,到目前为止我发现我必须确保数组列表的一些同步机制可以跨多个线程使用。
这就是我让它同步的方式:
for (int i = 0; i < Globls.iterationCount; i++)
{
if (bw_Obj.CancellationPending)
{
eve.Cancel = true;
break;
}
byte[] rawData4 = DMM4.IO.Read(4 * numReadings);
TempDisplayData_DMM4.Add(rawData4);
Globls.Display_DataDMM4 = ArrayList.Synchronized(TempDisplayData_DMM4);
Globls.Write_DataDMM4 = ArrayList.Synchronized(TempDisplayData_DMM4);
}
在其他线程中,我执行以下操作来制作本地副本:
ArrayList Local_Write_DMM4 = new ArrayList();
Local_Write_DMM4 = new ArrayList(Globls.Write_DataDMM4);
我是否以正确的方式同步数组列表?,在复制数组列表时我是否也需要锁定:
lock (Globls.Display_DataDMM4.SyncRoot){Local_Temp_Display1 = new ArrayList(Globls.Display_DataDMM4);}
还是单次操作安全?我实际上并没有运行这段代码,我需要在周末运行它,我不想看到另一个异常:(。请帮助我!