2011-05-10 4 views
1

unmanaged 코드를 호출 할 때 멀티 스레딩 사용에 대한 일반적인 조언이 있습니까?C# 스레딩 문제

랜덤으로 액세스 위반 오류을 수신하고 분명히 그 코드를 파고 들기는 합리적이지 않습니다.

위반 호출을 제거하기 위해 이러한 호출을 critical section의 호출에 넣는 대신 시도 할 수있는 방법이 있습니까?

+1

액세스 위반 오류가 없습니다 * 반드시 * 적어도 당신이 안전하지 않은 코드를 작성하고 있지 멀티 스레딩 문제의 결과. 명시 적으로 여러 스레드를 작성하고 있습니까? 아니면 단지 문제가되어야한다고 가정하고 있습니까? 디버거가 당신에게 무엇을 말합니까? –

답변

1

호출하는 관리되지 않는 구성 요소가 threadsafe로 프로그래밍되었는지 여부에 따라 다릅니다.

이 코드를 병렬로 호출 할 때만 액세스 위반이 발생하면 사용중인 구성 요소가 스레드 세이프가 아닌 것처럼 보입니다.

은 보안을 만들기 위해 C# lock() 문을 사용

private static readonly myLockObject = new object(); 

... 

lock (myLockObject) 
{ 
    CallMyUnsafeCode(); 
} 
+1

글쎄, 결국 나는 중요한 부분에 대해서 이야기 할 때였 다. 어쨌든 고마워. –