На этом шаге мы рассмотрим реализацию синхронизации потоков.
Потоки, желающие обратиться к СОМ-объекту в другом отделении должны получить указатели на его интерфейс с помощью маршалинга. Прямой указатель им недоступен, иначе стал бы возможен одновременный множественный доступ к СОМ-объекту, а это строго запрещено правилами модели разделенных потоков.
Прибегая к маршалингу, СОМ использует систему обмена сообщениями Windows для синхронизации потоков. Каждый STA-поток имеет цикл обработки сообщений, куда поступают запросы маршалинга из других процессов и из других отделений того же процесса. Когда клиент запрашивает объект сервера, код маршалинга помещает соответствующее сообщение в очередь потока сервера. Запросы ставятся в очередь сообщений, и STA-поток обрабатывает их по одному.
На следующем шаге мы рассмотрим передачу указателей на интерфейс.