2010-10-15 79 views
1

我開發了我的第一個COM組件(是的,在COM開發領域的一個新手),初始化是用COINIT_MULTITHREADED完成的。此外,此COM組件是本地服務器可執行文件。但是,我沒有向該組件添加任何同步代碼。你怎麼看:我必須添加CRITICAL_SECTION代碼或MS COM架構爲我處理它?提前致謝。[C++]我的COM服務器是否需要同步?

回答

1

由於您指定了COINIT_MULTITHREADED,COM​​允許多個同時呼叫到您的服務器,因此您需要自己進行同步。

如果您希望COM序列化調用,請使用COINIT_APPARTMENTHREADED。

查看MSDN的詳細信息。

0

是的。

如果您知道將從多個方向(線程)訪問數據,請使用您自己的互斥機制,不要假設MS COM體系結構來處理它。

至少,基於微軟所做的其他技術,我至少會這樣做,我曾經有過這樣的經歷 - 就像「我們做基礎,剩下的事情」。至少使用本地API。

將臨界區對象包裝在一個不錯的類中,然後踢它!

+0

是否有外部服務器的線程模型? – sharptooth 2010-10-15 07:43:24

+0

@sharptooth:不,COM保證不是線程安全的。 – 2010-10-15 07:55:23