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

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

TThread - и совместное использование данных [D6]


Michael Makushev ©   (2003-08-18 13:30:00) 

Есть в программе класс производный от TThread. После запуска главной формы создается экземпляр и запускается в свободное плавание. Дальше есть список объектов (не важно каких) TObjectList.
Вопрос вот в чем: тред обращается к объекту из списка (получает на него указатель и вызывает его метод). И одновременно с этим с главной формы по кнопке может поступить комманда на уничтожение списка. Как будут вести себя тред, список и вызывающая уничтожение функция? (по моим данным что-то где-то вызывало подвисание). Какие способы избежать коллизий?


HolACost!   (2003-08-18 19:44:00) [1]

Удалено модератором
Примечание: Offtopic


Verg   (2003-08-18 17:17:00) [2]

TMultiReadExclusiveWriteSynchronizer появился давно. По-моему он еще и в 3-ке был. Но глуковат был по жизни. Его использование иногда (именно иногда, очень редко) приводило к явлениям "несовместимым с жизнью", например, dead lock (взаимное плокирование потоков). В D6 его основательно переработали и с этих пор , вроде бывсе в порядке.
Применение сего механизма оправдано только в очень некоторых случаях (имхо).
В вашем же случае достаточно тривиальной critical section.


Michael Makushev   (2003-08-18 17:12:00) [3]

Спасибо, господа. Хотя как я понимаю TMultiReadExclusiveWriteSynchronizer повился в D6?
Или и в D5 он был?


Digitman   (2003-08-18 16:47:00) [4]


> HolACost


TCriticalSection как раз и инкапсулирует функц-ть крит.секций, предоставляемых WinAPI


HolACost!   (2003-08-18 16:33:00) [5]

Удалено модератором
Примечание: Offtopic


Verg   (2003-08-18 15:19:00) [6]


> TMultiReadExclusiveWriteSynchronizer


Эт-то такая нетривиальная штука, что я ей до сих пор боюсь доверять, хотя говорят, что с Д6 типа все глюки отловили и поправили, но...


Digitman   (2003-08-18 13:50:00) [7]

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


Игорь Шевченко   (2003-08-18 13:49:00) [8]

TMultiReadExclusiveWriteSynchronizer :)
Или набор критических секций для защиты списка от одновременного доступа.


Наверх

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