두 개의 스레드를 사용하여 숫자를 계산하는 작은 예제 프로그램을 만들었습니다. 또한 숫자 옆에 두 번째 숫자를 인쇄하므로 어느 번호의 스레드가 인쇄되었는지 확인할 수 있습니다.모든 스레드를 즉시 죽이는 방법
이제 내 목표는 두 스레드 중 하나가 7로 계산되면 즉시 중지하도록하는 것입니다. 나는 그것에 대해 어떻게 해야할지 모르겠습니다. 스레드 배열을 Counter
에 매개 변수로 전달한 다음 foreach 루프를 사용하여 두 스레드를 중단하는 방법에 대해 생각했습니다. 문제는 t0
이 실행 중일 수 있으며 t0.Abort()
을 호출하므로 t1.Abort()
이 더 이상 호출되지 않습니다.
public static int count = 0;
private static object lockObject = new object();
static void Main(string[] args) {
Thread t0 = new Thread(() => Counter(1, 10));
Thread t1 = new Thread(() => Counter(10, 20));
t0.Start();
t1.Start();
t0.Join();
t1.Join();
Console.ReadLine();
}
public static void Counter(int k, int m) {
for(int i = k; i < m; i++) {
lock (lockObject) {
count++;
Console.WriteLine(count + " " + i);
if (i == 7) {
/*
* Code that will kill thread t0 and t1
*/
}
}
}
}
출력은
1 1
2 2
3 10
4 11
5 12
6 13
7 14
같은 사람이 어떻게 t0
및 t1
모두를 죽일하는 제안이 있습니까해야 하는가?
일반 스레드 대신'작업'을 사용 하시겠습니까? 그렇다면 첫 번째 스레드가 주 스레드에서 종료 될 때까지 기다리는 간단한 방법이 있습니다. 그런 다음 모든 스레드를 종료 할 수 있습니다. –
당신의 목표는 어떤 쓰레드도 14보다 큰 숫자를 프린트하지 않아야한다는 것입니다, 맞습니까? 수는 결코 줄어들지 않습니다. 각 스레드가 count> 14를 볼 때 _itself_ (즉, 돌아 가기)를 죽이는 것이 아닌가? –
'CancellationTokenSource'는 당신의 친구입니다. – code4life