내 응용 프로그램에서 스레딩 문제가 있습니다.컬렉션의 멀티 스레딩 문제
종종 스레드 문제로 인해 항상 발생하지 않습니다. 는 때때로 collectionChanged 예외는이 코드에 발생
SyncLock _padLock
System.Threading.Monitor.Enter(serie)
For Each dat In serie.Lignes
WriteLine(dat.Columns(), False, 0, False)'exception here
Next
System.Threading.Monitor.Exit(serie)
End SyncLock
는 기본적으로 세리 객체의 배열 인 라인을 포함한다.
해당 객체에 모니터 잠금 기능이있는 경우 왜 다른 스레드가 시리즈를 수정할 수 있습니까?
또한 섹션이 VS에 잠겨있는 것을 볼 수있는 것 같습니다. 특정 방법으로 그렇게 할 수 있습니까?
편집 : 잠금이 제대로 수행되도록
나는 코드를 수정했습니다. 그 버그는 사라졌습니다. 하지만 지금은 다른 버그를 찾아내려고합니다. 이 코드는 매우 까다 롭습니다. 때로는 예기치 않은 결과 (인종 때문에)가 발생하기도하지만 코드에 중단 점이있을 때 코드를 재생산 할 수 없기 때문입니다.
이것은 정말 털이 많은 상황입니다.
컬렉션을 수정하는 코드도 동기화 되었습니까? (예 : 잠금을 위해 동일한 객체를 사용하고 있습니까?) –
아니요, 컬렉션을 수정하는 코드가 동기화되지 않았습니다. 하지만 개체를 잠그면 하나의 스레드 만 액세스 할 수 있어야합니까? – squelos
@squelos - 잠금이 * 객체 *를 보호하지 않으면 코드 블록 *을 투영합니다. 따라서 "serie"또는 "serie.Lignes"를 수정할 수있는 모든 코드 블록을 동일한 객체 *의 잠금 장치 *에 넣어야합니다. –