Главная страница
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.054 c
14-1131121160
psa247
2005-11-04 19:19
2005.11.27
Замена TaskManager


2-1131284903
Mouse_Rat
2005-11-06 16:48
2005.11.27
Как узнать путь к файлу?


1-1130954763
s_t_d
2005-11-02 21:06
2005.11.27
Страница QREPORT в Delphi-7


14-1130943942
sniknik
2005-11-02 18:05
2005.11.27
Эмуляция IP адреса...


2-1131692511
Oni
2005-11-11 10:01
2005.11.27
Что такое framework (терминералогический вопрос)?