2010-10-15 6 views
1

J'ai développé mon premier composant COM (oui, un débutant dans le domaine du développement COM), l'initialisation se fait avec COINIT_MULTITHREADED. En outre, ce composant COM est un exécutable de serveur local. Mais, je n'ai ajouté aucun code de synchronisation à ce composant. Que pensez-vous: dois-je ajouter CRITICAL_SECTION s au code ou l'architecture MS COM le gère pour moi? Merci d'avance.[C++] Mon serveur COM nécessite-t-il une synchronisation?

Répondre

1

Étant donné que vous avez spécifié COINIT_MULTITHREADED, COM autorise plusieurs appels simultanés vers votre serveur et vous devez donc effectuer la synchronisation vous-même.

Utilisez COINIT_APPARTMENTHREADED si vous souhaitez que COM sérialise les appels. Pour plus de détails, voir MSDN.

0

Oui. Utilisez votre propre mécanisme d'exclusion mutuelle si vous savez que les données seront accessibles à partir de plusieurs directions (threads), ne supposez pas l'architecture MS COM pour le gérer. C'est du moins ce que j'aurais fait, en me basant sur d'autres technologies que Microsoft a faites avec lesquelles j'ai de l'expérience - c'est comme «on fait la base, on fait le reste». Au moins avec l'API native. Enveloppez l'objet section critique dans une classe sympa et donnez un coup de pied avec!

+0

Existe-t-il des modèles de thread pour les serveurs externes? – sharptooth

+0

@sharptooth: Non, COM est garanti ne pas être thread-safe. –

Questions connexes