다음을 통해 공유


스레딩 사용(C# 프로그래밍 가이드)

업데이트: 2007년 11월

기본적으로 C# 프로그램에는 하나의 스레드가 있습니다. 이 스레드는 Main 메서드를 사용하여 시작하고 끝내는 프로그램의 코드를 실행합니다. Main을 통해 직접 또는 간접적으로 실행되는 모든 명령은 기본 스레드에서 수행하며 이 스레드는 Main이 반환될 때 종료됩니다. 그러나 기본 스레드와 함께 병렬 방식으로 코드를 실행하는 데 사용할 보조 스레드를 만들 수도 있습니다. 이러한 스레드를 일반적으로 작업자 스레드라고 합니다.

작업자 스레드를 사용하면 기본 스레드를 사용하지 않고도 시간이 오래 걸리는 작업이나 빨리 끝내야 할 작업을 수행할 수 있습니다. 예를 들어, 작업자 스레드는 이전 요청이 완료되기를 기다리지 않고 다른 들어오는 요청을 처리해야 하는 서버 응용 프로그램에 자주 사용됩니다. 작업자 스레드는 데스크톱 응용 프로그램에서 "백그라운드" 작업을 수행하는 데도 사용됩니다. 이렇게 하면 사용자 인터페이스 요소를 관리하는 기본 스레드가 사용자 작업에 계속 응답할 수 있습니다.

다중 스레딩을 사용하면 처리량과 응답성에 관련된 문제를 해결할 수 있지만 교착 상태나 경쟁 조건 같은 리소스 공유 문제가 새로 발생할 수도 있습니다. 다중 스레드는 파일 핸들, 네트워크 연결 같은 서로 다른 리소스를 필요로 하는 작업에 가장 적합합니다. 한 리소스에 여러 스레드를 할당하면 동기화 문제가 발생할 수 있으며 다른 스레드의 작업이 완료되기를 기다리느라 스레드가 자주 차단되어 다중 스레드를 사용하는 의의가 사라집니다.

일반적으로 작업자 스레드는 다른 스레드에 사용되는 리소스를 많이 필요로 하지 않으며 시간이 오래 걸리거나 빠른 시간 안에 끝내야 할 작업을 수행하는 데 사용됩니다. 대개의 경우 프로그램의 일부 리소스는 여러 스레드에서 액세스해야 합니다. 이러한 경우에 대비하여 System.Threading 네임스페이스에서는 스레드를 동기화하기 위한 클래스를 제공합니다. 이러한 클래스에는 Mutex, Monitor, Interlocked, AutoResetEventManualResetEvent가 있습니다.

이러한 클래스의 일부 또는 전체를 사용하여 여러 스레드의 작업을 동기화할 수 있지만 다중 스레딩에 대한 일부 지원 기능은 C# 언어를 통해 지원됩니다. 예를 들어, C# Lock 문Monitor를 암시적으로 사용하여 동기화 기능을 제공합니다.

다음은 일반적인 다중 스레딩 방법을 보여 주는 항목입니다.

관련 단원

자세한 내용은 다음 항목을 참조하십시오.

참고 항목

작업

Monitor Synchronization 기술 샘플

Wait Synchronization 기술 샘플

스레딩 샘플

개념

C# 프로그래밍 가이드

Monitor

연동 작업

AutoResetEvent

참조

Thread

Mutex

기타 리소스

관리되는 스레딩

스레드 및 스레딩 사용

스레드 샘플