На этом шаге мы перечислим существующие потоковые модели.
Поскольку одному СОМ-объекту могут одновременно обращаться множество клиентов, Вы обязаны обеспечить механизм синхронизации доступа к нему.
В общем случае за синхронизацию объектов отвечает операционная система. Важно понимать, как она это делает, чтобы создавать компоненты, способные эффективно работать в многопоточной среде. В СОМ определены четыре потоковые модели (threading models) упрощающие понимание и разработку для такой среды.
Потоковая модель описывает тип и степень безопасности потока, реализованных в компоненте. СОМ-компонент может поддерживать одну из четырех моделей:
Прежде чем использовать СОМ-объект, клиентский поток должен инициализировать библиотеки СОМ, вызвав API-функцию CoInitializeEx(), где Вы задаете модель вызова создаваемых им объектов. Клиентский поток вправе выбрать одну из двух моделей - разделенных или свободных потоков.
Клиентское приложение независимо от собственной модели может свободно обращаться к СОМ-компоненту, созданному на основе любой другой модели. Если модели клиента и сервера не совпадают, библиотека СОМ предпринимает меры, чтобы они не нарушали работу потоков друг друга. Однако иногда это снижает общую производительность приложения.
На следующем шаге мы рассмотрим однопоточную модель.