Комментарии по поводу DLL и безопасной многопоточной среды

Комментарии по поводу DLL и безопасной многопоточной среды

• Всякий раз, когда создается новый поток, вызывается функция DllMain с опцией DLL_THREAD_ATTACH, но для основного потока отдельного вызова с опцией DLL_THREAD_ATTACH не существует. В случае основного потока должна использоваться опция DLL_PROCESS_ATTACH.

• Вообще говоря, в том числе и в данном случае (возьмите, например, поток, принимающий сообщения (accept thread)), некоторым потокам распределение памяти может и не требоваться, но DllMain не в состоянии различать отдельные типы потоков. Поэтому на участке кода, соответствующем варианту выбора DLL_THREAD_ATTACH, фактического распределения памяти не происходит; здесь только инициализируется параметр TLS. Распределение памяти осуществляется точкой входа ReceiveCSMessage при первом ее вызове. Благодаря этому собственная память выделяется только тем потокам, которые в этом действительно нуждаются, и различные типы потоков получают ровно столько ресурсов, сколько им требуется.

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

• Исходным кодом DLL, размещенным на Web-сайте, предусмотрен вывод общего количества вызовов DllMain в соответствии с их типами.

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

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

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

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

7.2. Изменяем настройки по умолчанию. Делаем Windows более безопасной

Из книги Защити свой компьютер на 100% от вирусов и хакеров автора Бойцев Олег Михайлович

7.2. Изменяем настройки по умолчанию. Делаем Windows более безопасной Не секрет, что одним из «факторов слабости» системы Windows являются ее настройки по умолчанию. Открытые по умолчанию диски, множество непонятно зачем работающих служб и сервисов.Итак, приступим. Основные


Правила безопасной работы в Интернете

Из книги Очень хороший самоучитель пользователя компьютером. Как самому устранить 90% неисправностей в компьютере и увеличить его возможности автора Колисниченко Денис Николаевич

Правила безопасной работы в Интернете Как работать в Интернете, чтобы не подцепить вирус? Вот основные правила:? при работе в Интернете не забывайте запускать антивирус в режиме монитора. Что же касается Антивируса Касперского, то после установки он добавляется в


Безопасность должна быть безопасной

Из книги Популярный самоучитель работы в Интернете автора Кондратьев Геннадий Геннадьевич

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


Библиотеки с многопоточной поддержкой

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

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


Комментарии по поводу реализации объекта порогового барьера

Из книги VBA для чайников автора Каммингс Стив

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


Комментарии по поводу функций управления очередью с точки зрения производительности

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

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


Комментарии по поводу многоступенчатого конвейера

Из книги Фундаментальные алгоритмы и структуры данных в Delphi автора Бакнелл Джулиан М.

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


Комментарии по поводу клиент-серверного процессора командной строки

Из книги Анонимность и безопасность в Интернете. От «чайника» к пользователю автора Колисниченко Денис Николаевич

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


Комментарии по поводу многопоточных моделей

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Комментарии по поводу многопоточных моделей Для описания методов проектирования многопоточных программ используются такие термины, как пул потоков (thread pool), симметричные потоки (symmetric threads) и асимметричная потоковая организация программ (asymmetric threading), а мы при создании


Решение проблемы долговременных состояний в многопоточной среде

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

Решение проблемы долговременных состояний в многопоточной среде В искомом решении сочетаются несколько компонентов:• Библиотека DLL, в которой содержатся функции, обеспечивающие отправку и прием сообщений.• Функция, представляющая точку входа в DLL.• Локальная


11.1.4. Правила безопасной работы в Интернете

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

11.1.4. Правила безопасной работы в Интернете Придерживаясь следующих простых правил, вы сможете избежать заражения вашего компьютера.? Установите антивирус, способный работать в режиме монитора, т. е. проверять все открываемые файлы. О выборе антивируса мы поговорим в


Соображения по поводу эффективности

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

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


6.4. Правила безопасной работы в Интернете

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

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


Функции, безопасные в многопоточной среде

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

Функции, безопасные в многопоточной среде Стандарт POSIX.1 требует, чтобы все определенные в нем функции, а также функции, определенные в стандарте ANSI С, были безопасными в многопоточной среде. Исключения из этого правила приведены в табл. 26.1.К сожалению, в POSIX.1 ничего не