![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать является ли класс потокобезопасным или нет [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.