매초마다 지속적으로 업데이트되는 배열 목록이 있습니다. 두 개의 다른 스레드에서 동일한 배열 목록을 사용하고 로컬 복사본을 만들어야합니다. 나는이 모든 일을했지만 인덱스 바운드 이상한 예외를 얻을, 내가 지금까지 발견 한 배열 목록에 대한 몇 가지 동기화 메커니즘을 여러 스레드에서 사용할 수 있도록합니다. 또한?Arraylist 동기화 문제
ArrayList Local_Write_DMM4 = new ArrayList();
Local_Write_DMM4 = new ArrayList(Globls.Write_DataDMM4);
내가 올바른 방법에서의 ArrayList를 동기화하는 건가요 : 다른 스레드에서
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);
}
내가 로컬 복사본을 만들기 위해 다음을 수행하십시오
이 내가 그것을 동기화 만드는 중이라서 어떻게 배열 목록을 복사하는 동안 잠글 필요가 있습니까?
lock (Globls.Display_DataDMM4.SyncRoot){Local_Temp_Display1 = new ArrayList(Globls.Display_DataDMM4);}
또는 단일 작업으로 안전합니까?. 나는 실제로이 코드를 실행하지 않았다. 나는 주말에 그것을 실행할 필요가 있고 또 다른 예외를보고 싶지 않다. (. 제발 도와주세요!)
당신은 당신이 목표로하는 무엇을 설명 할 수 있습니까? 예외를 피하는 것은 그에 부수적입니다. 내용이 다른 목록이 포함 된 두 개의 스레드에 대해 걱정하십니까? 또는 다른 스레드가 읽는 동안 한 스레드가 목록 항목을 변경할 수 있다고 걱정합니까? – chris
문제의 해결책 : [link] (http://stackoverflow.com/questions/1813557/c-sharp-list-concurrent-removing-and-adding) – Artless
@chris arraylist는 결코 다른 내용을 가지고 있지 않습니다. 복사하는 동안 예외를 피하려고합니다. Local_Write_DMM4 = new ArrayList (Globls.Write_DataDMM4); 그리고 위의 접근 방식을 사용하여, 나는 내 주요 관심사 인 두 가지 질문을했습니다. – user1514077