Free-threaded consumers have the following threading responsibilities:
The set of threads initialized as free-threaded acts similarly to single big apartment, so pointers can be freely passed between these threads. To transfer a free-threaded object to a real apartment, it is recommended, although not required, to marshal the pointer at the source and unmarshal it at the destination. To transfer an apartment-threaded object to any free-threaded thread, it is necessary to marshal the pointer at the source and unmarshal it at the destination.
Apartment-threaded consumers have the following threading responsibilities: