Возможные ловушки и распространенные ошибки

Возможные ловушки и распространенные ошибки

Существует ряд факторов, о которых следует всегда помнить при разработке многопоточных программ. Пренебрежение некоторыми базовыми принципами может привести к появлению серьезных дефектов в программе, и лучше заранее стремиться к тому, чтобы не допустить ошибок, чем впоследствии затрачивать время на тестирование и отладку программ.

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

Часть соответствующих рекомендаций представлена ниже, а остальные будут даваться по мере изложения материала в последующих главах.

• Не делайте никаких предположений относительно очередности выполнения родительских и дочерних потоков. Вполне возможно, что дочерний поток будет выполняться вплоть до своего завершения, прежде чем родительский поток вернется из функции CreateThread, или наоборот, дочерний поток может вообще не выполняться в течение длительного периода времени. В случае же SMP-систем возможно параллельное выполнение родительского и одного или нескольких дочерних потоков.

• Убедитесь в том, что до вызова функции CreateThread были завершены все действия по инициализации данных, необходимые для правильной работы дочернего потока, либо приостановите поток или же воспользуйтесь любой другой подходящей методикой. Несвоевременная инициализация данных, требуемых дочерним потоком, может создать "условия состязаний" ("race conditions"), суть которых заключается в том, что родительский поток "состязается" с дочерним, чтобы инициализировать данные до того, как они начнут использоваться дочерним потоком.

• Проследите за тем, чтобы каждый отдельный поток имел собственную структуру данных, переданную ему через параметр функции потока. Не делайте никаких предположений относительно очередности завершения дочерних потоков (иначе можете столкнуться с другой разновидностью "проблемы состязаний").

• Выполнение любого потока может быть прервано в любой момент, и точно так же выполнение любого потока в любой момент может быть возобновлено.

• Не пользуйтесь приоритетами потоков в качестве замены явной синхронизации.

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

• В еще большей степени, чем в случае однопоточных программ, справедливо утверждение о том, что, хотя тестирование и необходимо, но его одного еще не достаточно для проверки корректности многопоточной программы. Довольно часто программы способны успешно пройти через самые различные тесты, несмотря на наличие в них дефектов. Ничто не может заменить тщательно выполненных проектирования, реализации и анализа кода.

• Поведение многопоточных программ может заметно меняться в зависимости от быстродействия и количества процессоров, версии ОС и множества других факторов. Тестирование программы в самых различных системах помогает выявлению всевозможных дефектов, но предыдущее предостережение остается в силе.

• Убедитесь в том, что предусмотрели для потоков достаточно большой объем стека, хотя заданного по умолчанию стека размером 1 Мбайт в большинстве случаев вам должно хватить.

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

• К счастью, чаще всего корректно работают самые простые программы и те, отличительной чертой которых является элегантность. При малейшей возможности избегайте усложнения программ.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Искусство неприятных сюрпризов: Патентные ловушки

Из книги Журнал «Компьютерра» N 10 от 13 марта 2007 года автора Журнал «Компьютерра»

Искусство неприятных сюрпризов: Патентные ловушки Автор: Родион Насакин«Патентными троллями» прозвали мелкие компании и частных лиц, которые тем или иным способом получают в собственность (обычно скупают по дешевке) множество патентов, но вместо разработки товаров и


Самые распространенные ошибки

Из книги Microsoft Office автора Леонтьев Виталий Петрович

Самые распространенные ошибки Не пытайтесь вручную перейти на новую строку с помощью клавиши Enter, Word сам разобьет текст на строчки. Используйте клавишу Enter только для того, чтобы начать новый абзац. Абзацный отступ многие новички прилежно отбивают несколькими пробелами


Возможные проблемы: зрение

Из книги Компьютер и здоровье автора Баловсяк Надежда Васильевна

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


Возможные затруднения при навигации в Сети

Из книги Windows Vista без напряга автора Жвалевский Андрей Валентинович

Возможные затруднения при навигации в Сети Встречаются случаи, когда на веб-страницах вместо русского текста загружается бессмысленный набор символов. Это не эльфийский диалект и не вирус. Просто браузер не понял, на каком языке написана страница. Умные люди говорят в


Возможные затруднения при навигации в Сети

Из книги Windows Vista автора Вавилов Сергей

Возможные затруднения при навигации в Сети Встречаются случаи, когда на некоторых веб-страницах вместо русского текста загружается бессмысленный набор кириллических символов. Это связано с тем, что в вашем браузере страница отображается в неверной кодировке. Чтобы


Общие ловушки

Из книги Энциклопедия разработчика модулей ядра Linux автора Померанц Ори

Общие ловушки Прежде чем писать ядерные модули, надо учесть несколько важных моментов.1. Использование стандартных библиотек. Вы не можете делать этого. В модуле, Вы можете использовать только функции, которые Вы можете увидеть в /proc/ksyms.2. Запрет прерываний. Если Вы на


15.1. Возможные способы подключения к Интернету

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

15.1. Возможные способы подключения к Интернету Способов подключения к Интернету много. Мы познакомимся с преимуществами и недостатками наиболее современных способов, а потом рассмотрим настройку самых популярных способов подключения.[6]15.1.1.


Проблемы, возможные при соединении с Интернетом

Из книги Интернет. Новые возможности. Трюки и эффекты [litres] автора Баловсяк Надежда Васильевна

Проблемы, возможные при соединении с Интернетом Наиболее типичные проблемы, которые могут возникать при попытке войти в Сеть.Установка связи не доходит до набора номераВозможно, модем не подключен, не настроен или используется другой программой. ПРИМЕЧАНИЕ Если модем


2.5.3. Возможные ошибки

Из книги Яндекс для всех автора Абрамзон М. Г.

2.5.3. Возможные ошибки Но вот ваш почтовый клиент готов к работе. С чем вы при этом можете столкнуться?? Первое — не все приходящие письма будут скачиваться. Это может быть связано с вашими настройками для работы с папкой Спам. Если вы не меняли настройки по умолчанию, все


13.4.2. Возможные проблемы и их решение

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

13.4.2. Возможные проблемы и их решение Как правило, кэширующий сервер запускается на отдельном компьютере, который подключается к Интернету по коммутируемому соединению. Нужно учитывать, что сервер DNS сразу требует обращения к какому-нибудь сетевому ресурсу. В нашем же


10.1. Ловушки Windows

Из книги Delphi. Трюки и эффекты автора Чиртик Александр Анатольевич

10.1. Ловушки Windows Из предыдущих глав вам должен быть понятен или, по крайней мере, известен механизм, который используется Windows для управления окнами приложений, – сообщения. Вероятно, большая мощь этого механизма и в то же время его уязвимость состоят в возможности


Распространенные ошибки

Из книги Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript автора Розенцвейг Гэри

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


1.5. Возможные постановки задачи

Из книги Политики безопасности компании при работе в Интернет автора Петренко Сергей Александрович

1.5. Возможные постановки задачи 1.5.1. Металлургическая компанияЗадача: разработка политики информационной безопасности металлургической компании (далее – «компания»), см. рис. 1.17.Основание: пункт «Разработка и реализация мероприятий по обеспечению информационной