Резюме: безопасный многопоточный код

Резюме: безопасный многопоточный код

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

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

2. В тех случаях, когда функцию могут вызывать несколько потоков, а какой-либо специфический для состояния потока параметр, например счетчик, должен сохранять свое значение в течение промежутков времени, отделяющих один вызов функции от другого, значение параметра состояния должно храниться в TLS или в структуре данных, выделенной специально для этого потока, например, в структуре данных, передаваемой потоку при его создании. Использовать стек для сохранения постоянно хранимых (persistent) значений не следует. Применение необходимой методики при построении безопасных многопоточных DLL иллюстрируют программы 12.4 и 12.5.

3. Старайтесь не создавать предпосылок для формирования условий состязаний наподобие тех, которые возникли бы в программе 7.2 (sortMT), если бы потоки не создавались в приостановленном состоянии. Если предполагается, что в определенной точке программы должно выполняться некоторое условие, используйте ожидание объекта синхронизации для гарантии того, что, например, дескриптор всегда будет ссылаться на существующий поток.

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

5. Переменные, разделяемые всеми потоками, должны быть статическими или храниться в глобальной памяти, объявленной с использованием спецификатора volatile, а также должны быть защищены с использованием описанных ниже механизмов синхронизации.

Объекты синхронизации обсуждаются в следующем разделе. Приведенных в нем объяснений вам будет достаточно для того, чтобы разработать простой пример системы "производитель/потребитель" (producer/consumer).

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

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

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

Резюме

Из книги Nero 8 автора Кашеваров А

Резюме В этой главе вы узнали, как создавать слайд-шоу. Для этого были использованы средства входящего в пакет Nero 8 приложения Nero Vision. Теперь вы знаете, как поместить фотографии в цифровой фотоальбом, сделать к ним звуковое сопровождение, создать красивое и понятное меню


Резюме

Из книги Основы AS/400 автора Солтис Фрэнк

Резюме В этой главе вы узнали, что можно делать со звуковыми файлами при помощи встроенных в пакет Nero 8 приложений.Как записать файлы формата Audio CD на жесткий диск, как декодировать звуковые файлы в компактный MP3-формат, как с его помощью создать и сохранить на дисках свою


Резюме

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Резюме Подведем краткий итог тому, что вы узнали из этой главы. Прежде всего, вы познакомились с новым приложением Nero Vision, входящим в состав пакета Nero 8. Вы научились создавать диски формата Video CD, используя два приложения – Nero Vision и Nero Burning ROM. Вы узнали, как выбрать


Резюме

Из книги Стандарты программирования на С++. 101 правило и рекомендация автора Александреску Андрей

Резюме Итак, подведем итог. Копирование дисков может осуществляться при помощи двух приводов, либо виртуального устройства. Копирование либо с помощью двух приводов осуществляется «на лету» с привода-источника на привод-приемник. А копирование посредством виртуального


Резюме

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

Резюме В этой главе мы рассмотрели две очень интересные программы пакета Nero 8 Premium – Nero Vision и Nero Recode, которые позволяют создавать DVD-Video либо из собственных видеоматериалов, либо из уже имеющихся дисков DVD-Video. Теперь вы знаете, как можно, пользуясь Nero Vision, получить


Безопасный сервер WWW

Из книги QNX/UNIX [Анатомия параллелизма] автора Цилюрик Олег Иванович

Безопасный сервер WWW По мере того, как все больше компаний подключают свои AS/400 к WWW (World Wide Web), вопрос сетевой защиты серьезно обостряется. Многие только что рассмотренные нами приемы защиты AS/400 в клиент/серверной среде применимы также и при подключении ее к открытым сетям


Пример: многопоточный поиск контекста

Из книги Халявные антивирусы и другие бесплатные программы из Интернета! автора Халявин Василий

Пример: многопоточный поиск контекста В программе 6.1 (grepMP) для выполнения одновременного поиска текстового шаблона в нескольких файлах использовались процессы. Программа 7.1 (grepMT), которая включает исходный код функции поиска текстового шаблона grep, обеспечивает


71. Проектируйте и пишите безопасный в отношении ошибок код

Из книги Цифровой журнал «Компьютерра» № 183 автора Журнал «Компьютерра»

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


2.3.4. Безопасный доступ к почте

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

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


Многопоточный менеджер

Из книги Цифровой журнал «Компьютерра» № 210 автора Журнал «Компьютерра»

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


1.1.6. Программа «Интернет Цензор» — безопасный детский Интернет

Из книги Все секреты Minecraft автора Миллер Меган

1.1.6. Программа «Интернет Цензор» — безопасный детский Интернет Интернет переполнен сайтами, которые несут информацию, не предназначенную для детей. Любой нормальный родитель, естественно, хотел бы ограничить доступ к подобным ресурсам. И это возможно.Одним из способов


Как придумать безопасный пароль, который легко запомнить Олег Нечай

Из книги Выжить в цифровом мире. Иллюстрированные советы от «Лаборатории Касперского» автора Дьяков Михаил

Как придумать безопасный пароль, который легко запомнить Олег Нечай Опубликовано 22 июля 2013 Недавно мы писали о том, почему даже не слишком квалифицированные злоумышленники с лёгкостью взламывают пароли большинства посетителей различных


4.13.3. Безопасный Интернет

Из книги автора

4.13.3. Безопасный Интернет Интернет не будет безопасным, пока нельзя четко установить принадлежность пакета. Любое поле IP-пакета можно подделать, и сервер никогда не сможет определить подлинность данных.Вы должны тщательно маскировать, что именно и кому разрешено на


Умный и безопасный почтовый ящик для многоквартирного дома Николай Маслухин

Из книги автора

Умный и безопасный почтовый ящик для многоквартирного дома Николай Маслухин Опубликовано 29 января 2014 Жилые многоквартирные дома становятся все выше, а это значит, что количество почтовых ящиков и площадь, которую они занимают на стене подъезда,


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

Из книги автора

Самый безопасный способ разработки шахты Хотите избежать скелетов и пещерных пауков, но не желаете переключаться в режим Мирный (Peaceful)? Поскольку мобы возникают в темноте, контролируйте уровень освещенности. Раскапывайте шахту прямо из своего защищенного дома


Совет 31: Безопасный шопинг

Из книги автора

Совет 31: Безопасный шопинг Правильный интернет-магазин непременно использует защищенный протокол HTTPS с сертификатом, подписанным легальным удостоверяющим центром. Убедиться в наличии такового совсем несложно — достаточно посмотреть на адресную строку. Если там