| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: ActiveX/СОМ/CORBA > Критическая секция в потоковой модели tmApartment |
| Автор: cheska 5.6.2013, 18:24 |
| Помогите понять ошибку. Есть COM-сервер (внепроцесный, exe) через который клиентские приложения могут работать с базой. По условию недопустимо чтоб клиенты могли одновременно менять данные. Причем изменения могут происходить при вызове разных процедур на сервере. Поэтому решил блокировать доступ используя на сервере критическую секцию. Предполагал что при вызове любой из процедур Клиентом-1 будет происходить захват критической секции и параллельный запрос любой процедуры сервера другим Клиентом-2 встанет в очередь пока не завершиться процедура вызванная Клиентом-1 и не освободиться критическая секция. Это так и работает если потоковая модель сервера = tmFree , но если меняю на tmApartment блокировки нет и Клиент-2 спокойно вызывает процедуры сервера когда идет выполнение другой процедуры Клиентом-1 что приводит к ошибке данных в базе. Пытался всеми силами понять почему нет блокировки в потоковой модели tmApartment но не смог. Перечитал вроде все по потоковым моделям и критическим секциям но без результата. Помогите разобраться ? |