Решение проблемы долговременных состояний в многопоточной среде
Решение проблемы долговременных состояний в многопоточной среде
В искомом решении сочетаются несколько компонентов:
• Библиотека DLL, в которой содержатся функции, обеспечивающие отправку и прием сообщений.
• Функция, представляющая точку входа в DLL.
• Локальная область хранения потока (TLS, глава 7). Подключение процесса к библиотеке сопровождается созданием индекса DLL, а отключение — уничтожением. Значение индекса хранится в статическом хранилище, доступ к которому имеют все потоки.
• Структура, в которой хранится буфер и его текущее состояние. Структура распределяется всякий раз, когда к библиотеке подключается новый поток, и его адрес сохраняется в записи TLS для данного потока. При отсоединении потока от библиотеки память, занимаемая его структурой, освобождается.
Таким образом, TLS играет роль статического хранилища, и у каждого потока имеется собственная уникальная копия этого хранилища.