На этом шаге мы рассмотрим особенности многопоточных отделений.
Многопоточные отделения поддерживают модель свободных потоков. От STA они отличаются тем, что в одном МТА могут находиться несколько потоков. МТА позволяет достичь максимальной производительности.
Все потоки, вызывающие CoInitalizeEx() с параметром COINIT_MULTITHREADED, располагаются в одном МТА и называются МTA-потоками. В отличие от STA в процессе может быть только одно МТА. Все вновь создаваемые МТА-потоки попадают в одно и то же МТА. Важно, что в этом случае не требуется маршалинг между потоками.
Необходимо, чтобы СОМ-объекты, созданные МТА-потоками, учитывали возможность их многопоточного использования и содержали собственный код синхронизации. Снимая ограничения, накладываемые маршалингом, МТА-модель обеспечивает самую высокую производительность и пропускную способность на стороне сервера.
В МТА потоки могут обращаться к СОМ-объекту одновременно, и СОМ никак не синхронизирует их запросы. Отсутствие синхронизации означает, что рассчитанные на эту модель СОМ-объекты должны быть безопасными с точки зрения взаимодействия потоков. Поэтому для защиты статических и глобальных данных компонента нужно использовать синхронизирующие объекты - события, мьютексы и семафоры.
На следующем шаге мы рассмотрим указание потоковой модели в реестре.