Eliminazione dei requisiti di affinità del thread durante la conversione di un oggetto COM STA in un oggetto COM MTA

3

Supponiamo di dover convertire un oggetto COM STA in un oggetto MTA. Gli appartamenti a thread singolo garantiscono non solo che solo un thread chiamerà l'oggetto alla volta, ma che è sempre lo stesso thread (affinità del thread).

Penso di aver compreso il primo requisito: l'oggetto ei suoi dati condivisi devono essere letti e scritti in modo thread-safe.

Sono meno chiaro su ciò di cui ho bisogno per garantire che il mio oggetto non richieda affinità di thread. Sono a conoscenza di due dubbi:

  1. Filtra l'archiviazione locale
  2. Blocchi

Esistono altri problemi comuni (o non comuni) che potrebbero causare il fallimento di un oggetto senza una garanzia esterna di affinità di thread?

    
posta Anonymous Coward 17.09.2015 - 20:52
fonte

1 risposta

3

Gli oggetti COM STA erano garantiti come thread-safe dal sottosistema COM stesso. Se usato correttamente dal client, l'oggetto COM non deve preoccuparsi della propria sicurezza del thread.

L'appartamento MTA ha girato quello sulla sua testa. L'oggetto COM deve ora occuparsi interamente della sicurezza del thread. Il sottosistema COM non fa promesse sull'accesso al thread sull'oggetto, potrebbe provenire da più thread e contemporaneamente.

I problemi di cui tener conto includono tutti i problemi di sicurezza del thread che spostano una classe dall'essere thread non sicuri per eseguire il thread safe.

Quando scegli di cambiare l'appartamento supportato dall'oggetto, è generalmente una buona idea analizzare prima come viene utilizzato.

  • Se è solo (o generalmente) utilizzato in uno STA, non c'è bisogno di cambiarlo e non ha alcun beneficio reale.
  • Se l'oggetto viene generalmente utilizzato da molti altri oggetti MTA, modificarlo potrebbe essere una buona idea.
  • Se l'oggetto viene eseguito il marshalling tra molti appartamenti STA, prendere nuovamente in considerazione il supporto MTA, ma solo se vi è un miglioramento misurabile delle prestazioni.
risposta data 17.09.2015 - 21:15
fonte

Leggi altre domande sui tag