Форум: "Основная";
Текущий архив: 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.46 MB
Время: 0.011 c