콘솔 응용 프로그램에서 스레드 관리와 관련하여 문제가 발생했습니다.
병렬로 10 개의 스레드를 실행 중입니다. & 모든 스레드가 특정 작업을 수행하고 있습니다.
작업이 완료/완료되면 중지/종료 스레드를 수행하고 즉시 새 스레드 인스턴스를 시작합니다.
나는 10 개의 쓰레드를 원한다. 그래서 누군가 쓰레드가 멈추거나 끝날 것이다. 그러면 새로운 쓰레드를 생성한다.
하지만 콘솔 응용 프로그램에서 실행중인 모드에서 10 개의 스레드가 필요할 때마다 &
C# 콘솔 응용 프로그램을 사용하여 병렬 작업을 수행해야합니다.
C# 콘솔 응용 프로그램에서 10 개의 스레드를 어떻게 실행할 수 있습니까?C# console appication에서 실행중인 모든 스레드를 관리하는 방법?
-1
A
답변
1
각 스레드의 끝에서 일부 공유 객체 (lock (obj) {})에 대한 잠금을 설정합니다. 그런 다음 보유하고있는 스레드 콜렉션에서 현재 스레드를 제거하십시오. collection.Count가 10보다 작 으면 새 것을 만들고 컬렉션 안에 넣습니다. 잠금 장치를 해제하십시오.
private List<Thread> threads = new List<Thread>();
private void ThreadFunction() {
// do something
// here before the lock
lock (threads) {
threads.Remove(Thread.CurrentThread);
if (thread.Count < 10) {
Thread t = new Thread(ThreadFunction);
threads.Add(t);
t.Start();
}
}
}
스레드 내부의 모든 예외를 catch해야합니다. 그렇지 않으면 스레드 예외가 발생하면 코드가 실패합니다. 그것은 코드의 잠금 부분이 항상 호출된다는 것을 확인합니다 (Thread abord 예외를 제외하고는 문제가되지 않습니다). 닷넷 스레드에
그러나 명시된대로 난 당신이 이러한 작업을 위해 스레드 풀을 사용한다고 생각
...
0
이 책은 다음과 같습니다 http://www.albahari.com/threading/ 이 혼자 아마 당신이 가진 모든 질문에 응답 할 것이다.
이러한 스레드를 사용하는 것에 따라 (나는 백그라운드에서 트랜잭션을 실행하는 것에 대해 이야기하고있을 것 같은데) BackgroundWorker를 사용할 수 있습니다.
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
이있는 BackgroundWorker는 경향이 훨씬 적은 오류를 디버깅하기 만 시작/종료/진행 이벤트를 처리 할 수 있습니다.
ThreadPool은 이러한 작업을 염두에두고 있습니다. 또한 귀하의 질문은 말도 안됩니다. 다시 말해주십시오. – alex
@Alex 왜 제 질문에는 감각이 없습니다 ..? –
10 개의 쓰레드가 있다면, 왜 종료 시킬까요? 기존 스레드로 더 많은 작업을 수행해보십시오. – spender