Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать является ли класс потокобезопасным или нет [D7]


den_777 ©   (2005-11-03 11:17:00) 

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

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

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


Leonid Troyanovsky   (2005-11-03 12:11:00) [1]


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

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

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


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

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

--
Regards, LVT.


Digitman   (2005-11-03 12:09:00) [2]


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


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


Leonid Troyanovsky   (2005-11-03 12:05:00) [3]


> den_777   (03.11.05 11:57) [5]

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


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

--
Regards, LVT.


jack128   (2005-11-03 12:03:00) [4]

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

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


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

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


Digitman   (2005-11-03 11:35:00) [6]


> den_777


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

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


den_777   (2005-11-03 11:35:00) [7]

спасибо


Digitman   (2005-11-03 11:32:00) [8]


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


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


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


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

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

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


TUser   (2005-11-03 11:27:00) [9]

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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо