Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Как узнать является ли класс потокобезопасным или нет   Найти похожие ветки 

 
den_777   (2005-11-03 11:17) [0]

Два фразы из книги Ксавье и Пачеко
Первая
Большая часть компонентов библиотеки VCL построена в предположении, что доступ к ним в каждый конкретный момент времени будет выполняться только из одного потока. Хотя это замечание особенно справедливо в отношении компонентов библиотеки VCL, используемых для создания интерфейса пользователя, тем не менее важно понимать, что оно справедливо и для большинства других типов компонетов.

И вторая
Помните, что даже важнейшие базовые классы в библиотеке VCL(например, класс TList) спроектированы без поддержки доступа к ним одновременно из нескольких потоков.

Всвязи с этим меня очень интересует потокобезопасность TstringList и TIniFile, а также общий механизм определения потокобезопасности класса.


 
TUser ©   (2005-11-03 11:27) [1]

> Всвязи с этим меня очень интересует потокобезопасность TstringList и TIniFile

Они не безопасны.

Общий способ определения - посмотреть, если ли в коде критические секции (они используются в VCL для синхронизации потоков). Еще часто в справке написано или по названию видно, например TThreadList.


 
Digitman ©   (2005-11-03 11:32) [2]


> меня очень интересует потокобезопасность TstringList и TIniFile


это не потокобезопасные классы.


> общий механизм определения потокобезопасности класса


при наличии соотв.темы в справке к классу это определяется чтением справки)

при наличии исх.текстов это определяется их внимательным анализом

общие же ("универсальные") критерии оценки вряд ли существуют


 
Digitman ©   (2005-11-03 11:35) [3]


> den_777


если у тебя есть какие-то сомнения на тему потокобезопасности того или иного класса, просто защити обращения к этому классу крит.секцией

накладные расходы при этом будут минимальны, зато это дает уверенность в сабже


 
den_777   (2005-11-03 11:35) [4]

спасибо


 
den_777   (2005-11-03 11:57) [5]

В продолжение вопроса. Почему у меня вызвало сомнение потокобезопасность TStringList. Просто ковыряюсь в чужих кодах. Там в потоке используется TStringList без всякой синхронизации. Говорят программа уже 5 лет стабильно работает. Это как случайность или есть логическое объяснение.


 
jack128 ©   (2005-11-03 12:03) [6]

den_777   (03.11.05 11:57) [5]
Там в потоке используется TStringList без всякой синхронизации.

Только в одном потоке?? это только контролы(визуальные компоненты) обязаны работать именно в ОСНОВНОМ потоке, невизуальные классы могут работать в ЛЮБОМ потоке, главное чтобы одновременно доступ к ним производился только из одного потока..


 
Leonid Troyanovsky ©   (2005-11-03 12:05) [7]


> den_777   (03.11.05 11:57) [5]

> TStringList. Просто ковыряюсь в чужих кодах. Там в потоке
> используется TStringList без всякой синхронизации. Говорят
> программа уже 5 лет стабильно работает. Это как случайность
> или есть логическое объяснение.


Смотря, как используется.
Если пишет туда/читает из в одиночестве, а отдает в OnTerminate,
то ничего более и не надо.

--
Regards, LVT.


 
Digitman ©   (2005-11-03 12:09) [8]


> Там в потоке используется TStringList без всякой синхронизации


синхронизация нужна в случае, когда потенциально возможны одновременные обращения к объекту со стороны более чем одного потока


 
Leonid Troyanovsky ©   (2005-11-03 12:11) [9]


> jack128 ©   (03.11.05 12:03) [6]

>> Там в потоке используется TStringList без всякой синхронизации.

> Только в одном потоке?? это только контролы(визуальные компоненты)


Ну и работают они в первичном потоке.
Важней то, что обращение к ним из вторичного потока не всегда
пройдет безнаказанно.

Хотя, скажем, с TListBox такие фокусы проходят, бо изменение
большинства  свойств идут через SendMessage.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.053 c
14-1131354036
kjgg
2005-11-07 12:00
2005.11.27
Boot-диск


3-1129300957
Woolen
2005-10-14 18:42
2005.11.27
"sql state 42000 error code 0" при поиске по GUID через dbExpress


14-1131344179
CHES
2005-11-07 09:16
2005.11.27
Элемент управления сложной формы


14-1131256484
WebSQLNeeder
2005-11-06 08:54
2005.11.27
Почему не работает раздел "Сайты" http://www.delphimaster.ru/link


2-1131466080
scorp123
2005-11-08 19:08
2005.11.27
Проблема с индексом