Modelli di threading COM+

I modelli di threading COM+ sono progettati intorno a una raccolta di oggetti denominata apartment. Un apartment è una raccolta di contesti contenuti in un processo, come illustrato nella figura seguente.

Diagramma che mostra una raccolta di contesti in un'attività, all'interno di un apartment, all'interno di un processo.

Le chiamate all'interno di un appartamento sono dirette, mentre le chiamate tra appartamenti (out-of-process) sono indirette e richiedono codice proxy e stub. Gli appartamenti consentono oggetti con diverse proprietà di sincronizzazione e reentrancy e hanno due categorie: a thread singolo e multithreading. Gli oggetti in un apartment a thread singolo (STA) vengono eseguiti sul thread specifico in cui sono stati creati. Gli stA consentono l'esecuzione di un solo metodo alla volta. Sono progettati per interfacce utente e si basano sulla coda dei messaggi di Microsoft Windows per elaborare le chiamate in ingresso.

Gli oggetti in un apartment multithreading (MTA) vengono eseguiti su qualsiasi thread e consentono l'esecuzione simultanea di qualsiasi numero di metodi. Gli MTA supportano implicitamente la reentrance.

Le classi COM+ sono contrassegnate con una proprietà ThreadingModel che consente a COM+ di creare l'oggetto nell'apartment appropriato. Per determinare l'apartment in cui viene creato un oggetto, CoCreateInstance usa la proprietà ThreadingModel.

I thread devono chiamare CoInitializeEx prima di poter usare COM+. Questo li crea all'interno dell'appartamento e del contesto corretti. L'apartment del thread principale è determinato come il primo STA chiamato da CoInitializeEx. Questa operazione è in genere associata al thread principale di un processo. CoInitializeEx indica il tipo di apartment richiesto dal thread impostando i flag seguenti:

  • COINIT_MULTITHREADED: individua il thread nel singolo apartment multithreading.
  • COINIT_APARTMENTTHREADED: inserisce il thread in un nuovo sta sta.

Negli argomenti seguenti di questa sezione vengono fornite altre informazioni sull'uso di modelli di threading e appartamenti in COM+:

Processi, thread e appartamenti

ThreadingModel