Возможные ловушки и распространенные ошибки
Возможные ловушки и распространенные ошибки
Существует ряд факторов, о которых следует всегда помнить при разработке многопоточных программ. Пренебрежение некоторыми базовыми принципами может привести к появлению серьезных дефектов в программе, и лучше заранее стремиться к тому, чтобы не допустить ошибок, чем впоследствии затрачивать время на тестирование и отладку программ.
Существенно то, что потоки выполняются в асинхронном режиме. По отношению к ним не действует никакая система упорядочения, если только вы не создали ее явно. Именно асинхронное поведение потоков делает их столь полезными, однако при отсутствии должного внимания можно столкнуться с серьезными трудностями.
Часть соответствующих рекомендаций представлена ниже, а остальные будут даваться по мере изложения материала в последующих главах.
• Не делайте никаких предположений относительно очередности выполнения родительских и дочерних потоков. Вполне возможно, что дочерний поток будет выполняться вплоть до своего завершения, прежде чем родительский поток вернется из функции CreateThread, или наоборот, дочерний поток может вообще не выполняться в течение длительного периода времени. В случае же SMP-систем возможно параллельное выполнение родительского и одного или нескольких дочерних потоков.
• Убедитесь в том, что до вызова функции CreateThread были завершены все действия по инициализации данных, необходимые для правильной работы дочернего потока, либо приостановите поток или же воспользуйтесь любой другой подходящей методикой. Несвоевременная инициализация данных, требуемых дочерним потоком, может создать "условия состязаний" ("race conditions"), суть которых заключается в том, что родительский поток "состязается" с дочерним, чтобы инициализировать данные до того, как они начнут использоваться дочерним потоком.
• Проследите за тем, чтобы каждый отдельный поток имел собственную структуру данных, переданную ему через параметр функции потока. Не делайте никаких предположений относительно очередности завершения дочерних потоков (иначе можете столкнуться с другой разновидностью "проблемы состязаний").
• Выполнение любого потока может быть прервано в любой момент, и точно так же выполнение любого потока в любой момент может быть возобновлено.
• Не пользуйтесь приоритетами потоков в качестве замены явной синхронизации.
• Никогда не прибегайте к аргументации наподобие "вряд ли это может произойти" при анализе корректности программы. Если что-то может произойти, оно обязательно произойдет, причем тогда, когда вы меньше всего этого ожидаете.
• В еще большей степени, чем в случае однопоточных программ, справедливо утверждение о том, что, хотя тестирование и необходимо, но его одного еще не достаточно для проверки корректности многопоточной программы. Довольно часто программы способны успешно пройти через самые различные тесты, несмотря на наличие в них дефектов. Ничто не может заменить тщательно выполненных проектирования, реализации и анализа кода.
• Поведение многопоточных программ может заметно меняться в зависимости от быстродействия и количества процессоров, версии ОС и множества других факторов. Тестирование программы в самых различных системах помогает выявлению всевозможных дефектов, но предыдущее предостережение остается в силе.
• Убедитесь в том, что предусмотрели для потоков достаточно большой объем стека, хотя заданного по умолчанию стека размером 1 Мбайт в большинстве случаев вам должно хватить.
• Потоки следует использовать только тогда, когда это действительно необходимо. Таким образом, если по самой своей природе некоторые операции допускают параллелизм, то каждое такое действие может быть представлено потоком. В то же время, если операциям присуща очередность, то потоки лишь усложнят программу, а связанный с ними расход системных ресурсов может привести к снижению производительности.
• К счастью, чаще всего корректно работают самые простые программы и те, отличительной чертой которых является элегантность. При малейшей возможности избегайте усложнения программ.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
1.5. Возможные постановки задачи
1.5. Возможные постановки задачи 1.5.1. Металлургическая компанияЗадача: разработка политики информационной безопасности металлургической компании (далее – «компания»), см. рис. 1.17.Основание: пункт «Разработка и реализация мероприятий по обеспечению информационной
Возможные затруднения при навигации в Сети
Возможные затруднения при навигации в Сети Встречаются случаи, когда на некоторых веб-страницах вместо русского текста загружается бессмысленный набор кириллических символов. Это связано с тем, что в вашем браузере страница отображается в неверной кодировке. Чтобы
Проблемы, возможные при соединении с Интернетом
Проблемы, возможные при соединении с Интернетом Наиболее типичные проблемы, которые могут возникать при попытке войти в Сеть.Установка связи не доходит до набора номераВозможно, модем не подключен, не настроен или используется другой программой. ПРИМЕЧАНИЕ Если модем
13.4.2. Возможные проблемы и их решение
13.4.2. Возможные проблемы и их решение Как правило, кэширующий сервер запускается на отдельном компьютере, который подключается к Интернету по коммутируемому соединению. Нужно учитывать, что сервер DNS сразу требует обращения к какому-нибудь сетевому ресурсу. В нашем же
2.5.3. Возможные ошибки
2.5.3. Возможные ошибки Но вот ваш почтовый клиент готов к работе. С чем вы при этом можете столкнуться?? Первое — не все приходящие письма будут скачиваться. Это может быть связано с вашими настройками для работы с папкой Спам. Если вы не меняли настройки по умолчанию, все
Возможные затруднения при навигации в Сети
Возможные затруднения при навигации в Сети Встречаются случаи, когда на веб-страницах вместо русского текста загружается бессмысленный набор символов. Это не эльфийский диалект и не вирус. Просто браузер не понял, на каком языке написана страница. Умные люди говорят в
Общие ловушки
Общие ловушки Прежде чем писать ядерные модули, надо учесть несколько важных моментов.1. Использование стандартных библиотек. Вы не можете делать этого. В модуле, Вы можете использовать только функции, которые Вы можете увидеть в /proc/ksyms.2. Запрет прерываний. Если Вы на
Самые распространенные ошибки
Самые распространенные ошибки Не пытайтесь вручную перейти на новую строку с помощью клавиши Enter, Word сам разобьет текст на строчки. Используйте клавишу Enter только для того, чтобы начать новый абзац. Абзацный отступ многие новички прилежно отбивают несколькими пробелами
10.1. Ловушки Windows
10.1. Ловушки Windows Из предыдущих глав вам должен быть понятен или, по крайней мере, известен механизм, который используется Windows для управления окнами приложений, – сообщения. Вероятно, большая мощь этого механизма и в то же время его уязвимость состоят в возможности
Распространенные ошибки
Распространенные ошибки Независимо от того, изменяете ли вы игру или создаете свою собственную, время от времени вы будете сталкиваться с ошибками. Обычно это несерьезные ошибки, которые легко обнаружить и исправить. Вот некоторые ошибки, с которыми я столкнулся при
Искусство неприятных сюрпризов: Патентные ловушки
Искусство неприятных сюрпризов: Патентные ловушки Автор: Родион Насакин«Патентными троллями» прозвали мелкие компании и частных лиц, которые тем или иным способом получают в собственность (обычно скупают по дешевке) множество патентов, но вместо разработки товаров и
15.1. Возможные способы подключения к Интернету
15.1. Возможные способы подключения к Интернету Способов подключения к Интернету много. Мы познакомимся с преимуществами и недостатками наиболее современных способов, а потом рассмотрим настройку самых популярных способов подключения.[6]15.1.1.
Возможные проблемы: зрение
Возможные проблемы: зрение Чаще всего при работе за компьютером страдает зрение ребенка – резкое увеличение зрительной нагрузки может быть опасно. Об этом часто говорят врачи–офтальмологи, которые при подозрении на проблемы со зрением рекомендуют ограничивать работу