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

Вниз

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

Наверх




Память: 0.47 MB
Время: 0.031 c
1-1184211090
Phoenix
2007-07-12 07:31
2007.09.23
Необходимо определить были ли пороизведенны изменения на форме


2-1188396599
Oleg_teacher
2007-08-29 18:09
2007.09.23
BDE


1-1184077237
vasilii
2007-07-10 18:20
2007.09.23
о скорости чтения usb


1-1184231629
Makhanev Alexander
2007-07-12 13:13
2007.09.23
TStringList между потоками...


15-1188267255
Slider007
2007-08-28 06:14
2007.09.23
С днем рождения ! 28 августа 2007 вторник





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский