2014-12-11 2 views
0

C# 다중 스레드 응용 프로그램이 있는데 두 개의 다른 스레드가 데이터 파일을 쓰는 루틴을 호출 할 때 간단한 문제가 발생했습니다. 이 루틴에서 파일의 코드가 모든 VBNET.FileSystem 호출을 사용하여 즉,이 Microsoft 오류 메시지의 문구

VBNET.FileSystem.FreeFile() 

...

VBNET.FileSystem.FileOpen(...) 

...

했다 그래서이 프로그램은 고대 VB 프로그램부터 전환했다
VBNET.FileSystem.WriteLine(...) 

...

VBNET.FileSystem.FileClose(...) 

예외는 말했다 (독점 물건 난독 화와 함께 ...)

"파일에 액세스 할 수 없습니다 과정 'C를 : \ XXXX \ YYYY \ zzz.txt'는 다른 프로세스에서 사용하고 있기 때문에"

스레드 안전성으로 해결하기는 쉽지만, 궁금한 점은 예외이 입니다. 이유 과정? 문제는 프로세스 문제가 아닌 스레딩 문제 였고 루틴을 중요한 섹션으로 수정하여 문제를 해결했습니다. VBNET 파일 I-O 작업은 별도의 프로세스를 생성합니까?

+0

프로세스 == 스레드 – paqogomez

+0

완전히 분리 된 프로세스라면 작업 관리자에서 볼 수 있습니다 ... –

+0

@paqogomez 용어는 동일하지 않습니다. 모든 프로세스에는 최소한 하나의 스레드가 있지만 모든 스레드가 프로세스가 아닙니다. 프로세스는 많은 스레드를 포함 할 수 있습니다. – AaronLS

답변

2

실제로 "완전히 다른 프로세스가 될 수있을 때 프로세스 내에서 다른 스레드를 암시하는 것처럼"스레드 "라고하는 오류 메시지가 똑같이 오도 될 수 있으므로"프로세스 "라고 말합니다. 모든 하위 수준 API는 이미 액세스 중이기 때문에 액세스 할 수 없다는 것을 알고 있습니다. 문맥화 된 오류 메시지를 제공하는 것이 어려울 수 있으며, 자체적으로 실패 할 수있는 추가 정보를 검색해야하고 다른 오해의 소지가있는 예외를 유발해야하기 때문에 위험 할 수 있습니다 (일반적으로 처리/배치 할 때 가능한 한 작게하려고합니다 예외).

결론적으로 오류 메시지가보다 유익하기 때문에 오류 처리가 더욱 취약 해집니다.

"다른 스레드 또는 프로세스"라는 단어가 더 적합 할 수도 있지만 Microsoft 모호한 오류가 많이 발견되었습니다.

+0

예. 나는 단지 해명을 위해 변경하기에 충분하다고 생각하는 사람은 아무도 없다고 생각합니다. –

관련 문제