[C ++] Мой COM-сервер требует синхронизации? - PullRequest
1 голос
/ 15 октября 2010

Я разработал свой первый COM-компонент (да, новичок в области разработки COM), инициализация выполняется с COINIT_MULTITHREADED.Также этот COM-компонент является исполняемым файлом локального сервера.Но я не добавил код синхронизации к этому компоненту.Что вы думаете: мне нужно добавить CRITICAL_SECTION s к коду или MS COM-архитектура обрабатывает это для меня?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Поскольку вы указали COINIT_MULTITHREADED, COM разрешает несколько одновременных вызовов на ваш сервер, и, следовательно, вам необходимо выполнить синхронизацию самостоятельно.

Используйте COINIT_APPARTMENTHREADED, если вы хотите, чтобы COM сериализировал вызовы. MSDN для деталей.

0 голосов
/ 15 октября 2010

Да.

Используйте свой собственный механизм взаимного исключения, если вы знаете, что данные будут доступны из разных направлений (потоков), не предполагайте, что архитектура MS COM будет обрабатывать их.

ЭтоПо крайней мере, то, что я сделал бы, основываясь на других технологиях, разработанных Microsoft, с которыми у меня есть опыт, - это как «мы создаем базу, а вы делаете все остальное».По крайней мере, с собственным API.

Оберните объект критической секции в хороший класс и пинайте его!

...