Я пытаюсь написать ThreadManager для моего приложения C#. Я создаю несколько потоков:
Один поток для моего автора текста.
Один поток, который отслеживает статистику.
Несколько потоков для выполнения большой последовательности вычислений (до 4 потоков на ядро, и я запускаю свое приложение на 2x четырехъядерном сервере).Завершение многопоточного приложения
Мое приложение обычно работает до 24 часов за раз, поэтому все потоки создаются в начале, и они сохраняются в течение всего времени работы приложения.
Я хочу иметь одно место, где я «регистрирую» все мои протекторы, и когда приложение закрывается, я просто вызываю метод, и он проходит через все зарегистрированные потоки и отключает их.
Для этой цели я разработал следующий класс:
public class ThreadManager
{
private static Object _sync = new Object();
private static ThreadManager _instance = null;
private static List<Thread> _threads;
private ThreadManager()
{
_threads = new List<Thread>();
}
public static ThreadManager Instance
{
get
{
lock (_sync)
{
if (_instance == null)
{
_instance = new ThreadManager();
}
}
return _instance;
}
}
public void AddThread(Thread t)
{
lock (_sync)
{
_threads.Add(t);
}
}
public void Shutdown()
{
lock (_sync)
{
foreach (Thread t in _threads)
{
t.Abort(); // does this also abort threads that are currently blocking?
}
}
}
}
Я хочу, чтобы гарантировать, что все мои резьбы убили так что приложение может закрыть должным образом и закрытие в середине некоторого вычисления просто отлично слишком. Должен ли я знать о чем-нибудь здесь? Является ли этот подход хорошим, учитывая мою ситуацию?
WOW! У Лота хорошие ответы ... сейчас трудно выбрать. Я дал галочку Нейту, потому что он был первым, и было бы несправедливо отнять его у него. Посмотрим, что говорят голоса. Я получаю что-то полезное от всех ваших ответов, поэтому, пожалуйста, проголосуйте за свои сердца. – Kiril
Поведение потоков потоков по умолчанию такое же, как я предложил. Если вам все равно, что ваши потоки не закончатся, мое - самое простое решение. Очевидно, что другие ответы дают хорошие советы об управлении потоками, но вы конкретно заявляете, что убивающие потоки в середине вычислений в порядке. –
Я согласен с тобой Нейтом;), я не собираюсь отобрать галочку, потому что это было бы несправедливо, и ты дал мне самый точный, быстрый и простой ответ ... Я хочу, чтобы другие люди получили свою справедливую кредит, поэтому я хочу, чтобы все голосовали за все хорошие ответы. – Kiril