Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.014 c
1-1130868953
Alexander Dakis
2005-11-01 21:15
2005.11.27
Как создать динамическое выделение текста, как в редакторе Delphi


2-1131308159
ДимаДА
2005-11-06 23:15
2005.11.27
как с помощью АПИ узнать


6-1124018204
NikNet
2005-08-14 15:16
2005.11.27
Как сделать CHAT к внешнему WEB-Чату?


4-1127137615
Ландграф Павел
2005-09-19 17:46
2005.11.27
Как отловить смерть потока


8-1120465795
vladgul
2005-07-04 12:29
2005.11.27
Использование PTP (Picture Transfer Protocol) в своей программе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский