Я только что провел некоторое исследование о том, что может означать «свободная нить», и я также закончил с COM.Позвольте мне сначала привести два отрывка из книги Дона Бокса 1998 года Essential COM .(На самом деле книга содержит больше разделов о модели со свободным потоком, но я пока оставлю это здесь.)
Поток выполняется ровно в одной квартире ввремя.Прежде чем поток может использовать COM, он должен сначала войти в квартиру.[…] COM определяет два типа квартир: многопоточные квартиры (MTA) и однопоточные квартиры (STA).Каждый процесс имеет не более одного MTA;однако процесс может содержать несколько STA.Как следует из их имен, несколько потоков могут выполняться в MTA одновременно , тогда как в STA может выполняться только один поток.[…]
- со страниц 200-201.(Подчеркнуто мной.)
Каждый CLSID в DLL может иметь свой собственный ThreadingModel
.[…]
ThreadingModel="Both"
указывает, что класс может выполняться в MTA или STA. ThreadingModel="Free"
указывает, что класс может выполняться только в MTA. ThreadingModel="Apartment"
указывает, что класс может выполняться только в STA. - Отсутствие значения
ThreadingModel
означает, что класс может работать только на основной STA.Основная STA определяется как первая STA, инициализируемая в процессе.
- со стр. 204. (Форматирование и выделение добавлены мной.)
Я предполагаю, что это означает, что компонент (класс), который объявлен как свободнопоточный, выполняется в MTA, где возможен параллелизм нескольких потоков, а вызовы компонента из разных потоков явно разрешены;то есть.Свободнопоточный компонент поддерживает многопоточную среду.Очевидно, что для достижения этого он должен быть ориентирован на многопотоковое исполнение.
Противоположным будет компонент, предназначенный для STA, т.е.разрешает звонки только из одного потока.Такой класс не должен быть потокобезопасным (потому что COM позаботится о том, чтобы ни один другой поток, кроме того, который «вошел» / настроил STA, не мог использовать компонент в первую очередь, то есть COM защищает компонент отодновременный доступ).
Вывод: Термин COM "свободная резьба", по существу, имеет те же значения, что и более общий термин "потокобезопасный".
PS: В этом ответе предполагается, что «многопоточный» в основном означает что-то вроде «может иметь дело с одновременным доступом (возможно, из разных потоков)».
PPS: Мне интересно, является ли "свободная нить" противоположностью "сродства к потоку".