Необходимо для существующего компонента поменять потоковую модель с Apartment на Both.
Правильно ли я понимаю, что в этом случае код компонента надо сделать потокобезопасным? Достаточно
ли в каждом методе добавить блокировку критической секции или мьютекса? (через "умный" объект, чтобы свести к минимуму дублирование)
Заранее спасибо!
Re: Реализация компонента с ThreadingModel = Both
От:
Аноним
Дата:
28.01.09 16:27
Оценка:
Здравствуйте, CrazyBaboon, Вы писали:
CB>Здравствуйте!
CB>Необходимо для существующего компонента поменять потоковую модель с Apartment на Both. CB>Правильно ли я понимаю, что в этом случае код компонента надо сделать потокобезопасным? Достаточно CB>ли в каждом методе добавить блокировку критической секции или мьютекса? (через "умный" объект, чтобы свести к минимуму дублирование)
А смысл тогда в Both, если делать в каждом методе блокировку?
Re[2]: Реализация компонента с ThreadingModel = Both
Здравствуйте, CrazyBaboon, Вы писали:
CB>Здравствуйте!
CB>Необходимо для существующего компонента поменять потоковую модель с Apartment на Both. CB>Правильно ли я понимаю, что в этом случае код компонента надо сделать потокобезопасным? Достаточно CB>ли в каждом методе добавить блокировку критической секции или мьютекса? (через "умный" объект, чтобы свести к минимуму дублирование)
Если объкт сам не использует другие объекты, которые требуют single-threaded apartment...
Можно синхронизировать только доступ к внутренним данным объекта. Можно легко напороться на deadlock.
Можно обойтись без блокировок, если клиент гарантирует, что в каждый момент времени с объектом работает только один поток (т.н. rental модель).
Имею скафандр — готов путешествовать!
Re[2]: Реализация компонента с ThreadingModel = Both
Здравствуйте, rus blood, Вы писали:
RB>Если объкт сам не использует другие объекты, которые требуют single-threaded apartment... RB>Можно синхронизировать только доступ к внутренним данным объекта. Можно легко напороться на deadlock. RB>Можно обойтись без блокировок, если клиент гарантирует, что в каждый момент времени с объектом работает только один поток (т.н. rental модель).
Нет, никаких гарантий никто не дает. Меня интересует именно техника организации потокобезопасности компонента вручную, есть ли какие-то подводные камни на пути с критическими секциями?
Re[2]: Реализация компонента с ThreadingModel = Both
Здравствуйте, Аноним, Вы писали:
А>А смысл тогда в Both, если делать в каждом методе блокировку?
Конкретно в моем случае невозможна работа с компонентом из C# Console Application с MTA под x64 — проблемы с маршаллингом. Менять публичный интерфейс, для разрешения проблем с маршаллингом, я не могу. Замена потоковой модели на Both решает проблему.