Почему плохо приостанавливать / прерывать темы? - PullRequest
7 голосов
/ 02 июня 2011

Моя модель работы потоков состоит в том, что некоторые ThreadManager дают каждому потоку по очереди. Когда наступает очередь потока, он выполняет несколько строк кода.

Чтобы приостановить поток, нельзя ли просто сделать остановку ThreadManager (на мгновение), позволяющую этому потоку иметь поворот?

Чтобы прервать поток, не может ThreadManager просто никогда не дать этому потоку еще один ход?

В чем проблема?

Ответы [ 2 ]

12 голосов
/ 02 июня 2011

Цитата MSDN о приостановке потоков:

У вас нет возможности узнать, какой код выполняет поток, когда вы его приостанавливаете.Если вы приостановите поток, пока он удерживает блокировки, во время оценки разрешений безопасности, другие потоки в домене приложений могут быть заблокированы.Если вы приостанавливаете поток во время выполнения конструктора класса, другие потоки в домене приложений, которые пытаются использовать этот класс, блокируются.Блокировки могут возникнуть очень легко.

Прерванная нить может привести к непредвиденным обстоятельствам.Об этом есть хорошая статья: http://www.bluebytesoftware.com/blog/2009/03/13/ManagedCodeAndAsynchronousExceptionHardening.aspx

4 голосов
/ 02 июня 2011

Я согласен с Алексом, но для дальнейшего уточнения, если вам нужно «приостановить» поток, вероятно, будет лучше взглянуть на какой-нибудь механизм блокировки, такой как семафоры, мьютексы или один из множества других доступных.

Но, не зная вашего кода, Windows является преимущественной многозадачной средой.Обычно это не нужно, просто позвольте вашим потокам работать, а соответствующая ОС и планировщик обеспечат справедливый поворот всех ваших задач.

...