2013-09-28 3 views
1

Это сценарий. У нас есть много потоков для доступа к разделу кода, который защищен критическим разделом, который гарантирует, что только один поток за раз получит доступ к этой части. Теперь вопрос в том, что произойдет, если нить погибнет в критическом разделе? Будет ли приложение зависать? или какой-то способ блокировки будет выпущен?Что произойдет, если поток в критической секции затухает?

ответ

4

Из MSDN:

Если поток завершается, пока он имеет право собственности критической секции, состояние критической секции не определено.

Источник: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682608(v=vs.85).aspx

+0

Чтобы немного расширить это: если это поведение непригодно, используйте мьютекс вместо критического раздела. –

1

Вам нужно будет определить «штампы».

Вы имеете в виду, что это связано с неправильной памятью или другим доступом? Затем весь процесс выбрасывается ОС.

Вы имеете в виду, что нить прекращается (либо путем выхода, либо какой-либо другой нитью, заканчивающей ее)? Тогда у вас проблемы, потому что все выполнено правильно, включая завершение потока, поэтому все потоки, ожидающие критического раздела, будут застряли навсегда.

Вы имеете в виду, что нить входит в бесконечную петлю? Я не уверен, как Windows обрабатывает такую ​​ситуацию, но есть две стратегии: либо ОС будет считать, что «все работает правильно, поэтому я должен держаться подальше», либо будет существовать системная квота ЦП, которая израсходована ОС для завершения процесса. Только процесс (поток в нем) может привести к завершению одного потока, все остальные механизмы выкинут весь процесс.

+0

Я имел в виду второй вариант, он либо выхода или какой-либо другой поток завершает его. – Ram

Смежные вопросы