Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.23;
Скачать: CL | DM;

Вниз

TStringList между потоками...   Найти похожие ветки 

 
Makhanev Alexander   (2007-07-12 13:13) [0]

юзать глобальную переменную типа TStringList в неск-ких потоках (одного типа)  - надо тока через синхронизацию?

а простые переменные можно без синхронизации?


 
Однокамушкин   (2007-07-12 13:17) [1]

Доступ к любым переменным надо синхронизировать, исключение допускается только в том случае, если несколько нитей используют какую-то переменную только для чтения, и ни одна другая нить во время их работы не будет эту переменную изменять...

Другое дело, что для доступа к StringList-у нет нужды использовать такой радитальный метод синхронизации как Synchronize, достаточно критических секций...


 
DrPass ©   (2007-07-12 13:17) [2]


> а простые переменные можно без синхронизации?

Зависит от того, что ты считаешь "простыми". Атомарные типы вроде integer, char и т.д. можно и без синхронизации. Более сложные типы, например, строки и массивы - только с синхронизацией


 
Инс ©   (2007-07-12 13:17) [3]


> а простые переменные можно без синхронизации?


Нет. Представьте что будет, если два потока будут одновременно писать в эту переменную свои значения, а потом - читать. Что там будет?

См Interlocked-функции


 
Инс ©   (2007-07-12 13:19) [4]


> Атомарные типы вроде integer, char и т.д. можно и без синхронизации.


Интересное утверждение...


 
Makhanev Alexander   (2007-07-12 13:53) [5]

итого - если заюзать глобальную критич. секцию, то всё буит ок?


 
Инс ©   (2007-07-12 14:04) [6]


> итого - если заюзать глобальную критич. секцию, то всё буит
> ок?


Это смотря какая задача.


 
Makhanev Alexander   (2007-07-12 14:43) [7]

кстати, а если юзится synchronize, то в critical section нет смысла?

то есть в главном потоке всё по очереди выполнится?
(если N потоков одновременно сделают synchronize(myprocedure))


 
Makhanev Alexander   (2007-07-12 14:45) [8]

>Это смотря какая задача.
n потоков сохраняют в массив строк инфу, доступную всем потокам.

поток вначале читает массив и если там нет того чего надо, то пишет в него...  т.е. массив накапливает какие-то данные для потоков..


 
Makhanev Alexander   (2007-07-12 14:46) [9]

у тут хотелось бы точно знать - надо юзать CS при чтении из tstringlist"а или нет..


 
umbra ©   (2007-07-12 14:50) [10]


> надо юзать CS при чтении из tstringlist"а или нет

если использовать - хуже не будет, а лучше - скорее всего


 
Инс ©   (2007-07-12 14:54) [11]

Во-первых, Synchronize злоупотреблять не нужно. Его вызов заставляет поток остановиться и подождать, пока главный поток освободится и выполнит метод, переданный в качестве параметра. Synchronize нужно использовать только если необходимо обратиться в из потока к визуальным компонентам. Для вашей задачи действительно подойдет критическая секция. Каждое обращение к глобальному ресурсу (в вашем случае - TStringList) из любого потока (будь то главный или нет) заключайте в рамке enter/leave одной и той же критической секции. Как работает критическая секция надеюсь знаете.


 
Инс ©   (2007-07-12 14:56) [12]

Немного добавит надо.


> Synchronize нужно использовать только если необходимо обратиться
> в из потока к визуальным компонентам.


... или если данный код по тем или иным причинам должен быть выполнен именно главным потоком.


 
Kolan ©   (2007-07-12 14:59) [13]

Я бы централизовал синхронизацию. То есть потоки ничего не знаю о глобольной TStrings, а у них есть событие OnSendStrings.

Всем потокам назначается один обработчик события OnSendStrings. В этом обработчкике и используйте TCriticalSection для синхронизации.



Страницы: 1 вся ветка

Текущий архив: 2007.09.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
2-1188554563
БарЛог
2007-08-31 14:02
2007.09.23
Как узнать свободное место на удалённом компьютере?


4-1173250668
crytogen
2007-03-07 09:57
2007.09.23
Отсутствие бумаги при печати PCL


2-1188221033
cvg
2007-08-27 17:23
2007.09.23
Не компилирует функцию, возвращающую структуру :(


6-1170063963
Ural_angel
2007-01-29 12:46
2007.09.23
Обработка исключений в Socket


15-1185985731
oldman
2007-08-01 20:28
2007.09.23
А что такого уж нового в Vista, чего нет, скажем в 2000?