현재 TCPClient 클래스를 통해 FTP에서 파일을 전송하는 데 lock을 사용하고 있습니다.스레드 동기화 (C#의 경우)
그러나 이것은 보내고받을 단일 파일 만 지원합니다.
그래서이 상황 (잠금, 뮤텍스, 인터록, 읽기/쓰기 잠금, 세마포어)에서 사용하는 더 좋은 방법은 무엇입니까?
현재 TCPClient 클래스를 통해 FTP에서 파일을 전송하는 데 lock을 사용하고 있습니다.스레드 동기화 (C#의 경우)
그러나 이것은 보내고받을 단일 파일 만 지원합니다.
그래서이 상황 (잠금, 뮤텍스, 인터록, 읽기/쓰기 잠금, 세마포어)에서 사용하는 더 좋은 방법은 무엇입니까?
귀하의 상황이 이러한 잠금 컨텍스트로 해결 될 수 있는지 확실하지 않습니다. 비동기 I/O와 다양한 구현을 살펴볼 수도 있지만 특히 WebRequest 및 Webresponse 클래스와 관련됩니다.
당신은 당신이 당신의 FTP 또는 사용자 정의 라이브러리를 처리하기위한 기본 클래스를 사용하고 있는지 여부를 언급하지 않았다. 나는 너 자신이 FTP 핸들러를 직접 만들고 있다고 가정한다. 타사 라이브러리를 사용하는 경우 Async IO를 지원하는지 또는 다른 양식의 멀티 스레딩을 지원하는지 확인해야합니다.
세마포어를 사용하면 여러 가지 동시 작업을 만드는 고전적인 예입니다.
http://www.dijksterhuis.org/using-semaphores-in-c/
의 당신이 병렬 (각 파일에 대한 하나 개의 스레드)에서 전송하고자하는 파일의 목록을 가지고 (모든 업로드가 완료 될 때까지, 당신은 WaitHandle
의 배열을 만들 수 기다릴 수를 원하는 가정 해 봅시다 대기 핸들 == 파일 수 == 스레드 수) 스레드가 전송해야하는 파일과 함께 각 스레드 중 하나 (대기 핸들 : 스레드 == 1 : 1)를 전달하십시오.
스레드가 파일을 전송하고 존재하기 전에 대기 핸들을 설정합니다.
"주 스레드"에서 배열의 모든 대기 핸들이 WaitHandle.WaitAll(WaitHandle[])
을 사용하여 설정 될 때까지 기다릴 수 있습니다. 정확한 구문에 대해서는 정확하지 않을 수 있지만 이와 같은 명령이 존재합니다. 나는 그것을 전에 사용했다).
이것을 장벽이라고합니다.