2009-12-22 5 views
0

현재 TCPClient 클래스를 통해 FTP에서 파일을 전송하는 데 lock을 사용하고 있습니다.스레드 동기화 (C#의 경우)

그러나 이것은 보내고받을 단일 파일 만 지원합니다.

그래서이 상황 (잠금, 뮤텍스, 인터록, 읽기/쓰기 잠금, 세마포어)에서 사용하는 더 좋은 방법은 무엇입니까?

답변

0

귀하의 상황이 이러한 잠금 컨텍스트로 해결 될 수 있는지 확실하지 않습니다. 비동기 I/O와 다양한 구현을 살펴볼 수도 있지만 특히 WebRequestWebresponse 클래스와 관련됩니다.

당신은 당신이 당신의 FTP 또는 사용자 정의 라이브러리를 처리하기위한 기본 클래스를 사용하고 있는지 여부를 언급하지 않았다. 나는 너 자신이 FTP 핸들러를 직접 만들고 있다고 가정한다. 타사 라이브러리를 사용하는 경우 Async IO를 지원하는지 또는 다른 양식의 멀티 스레딩을 지원하는지 확인해야합니다.

1

의 당신이 병렬 (각 파일에 대한 하나 개의 스레드)에서 전송하고자하는 파일의 목록을 가지고 (모든 업로드가 완료 될 때까지, 당신은 WaitHandle의 배열을 만들 수 기다릴 수를 원하는 가정 해 봅시다 대기 핸들 == 파일 수 == 스레드 수) 스레드가 전송해야하는 파일과 함께 각 스레드 중 하나 (대기 핸들 : 스레드 == 1 : 1)를 전달하십시오.

스레드가 파일을 전송하고 존재하기 전에 대기 핸들을 설정합니다.

"주 스레드"에서 배열의 모든 대기 핸들이 WaitHandle.WaitAll(WaitHandle[])을 사용하여 설정 될 때까지 기다릴 수 있습니다. 정확한 구문에 대해서는 정확하지 않을 수 있지만 이와 같은 명령이 존재합니다. 나는 그것을 전에 사용했다).

이것을 장벽이라고합니다.