Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Потоки / 10 сообщений из 10, страница 1 из 1
10.10.2018, 21:13
    #39715798
NZeg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
два потока работают с TStringList
Первый поток считал первую строку - увеличил кол-во считанных строк
И так они поочерёдно строки считывают.
Т.е. к одной и той же строке оба они не могут обратиться.
Нужно ли этот код добавлять в критическую секцию?
...
Рейтинг: 0 / 0
10.10.2018, 22:01
    #39715818
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
NZeg,

да хоть и к одной строке. если только оба читают. и никто параллельно не пишет. а вот счетчик надо синхронизировать.
...
Рейтинг: 0 / 0
10.10.2018, 22:08
    #39715822
NZeg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
Да, счётчик синхронизировал.
а если код в потоке заключить в try except, при одновременном обращении двух потоков к одной строке меня выкинет в except или поток просто завершится или ничего не будет?
...
Рейтинг: 0 / 0
11.10.2018, 00:17
    #39715863
Олег Третьяков
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
NZegа если код в потоке заключить в try except, при одновременном обращении двух потоков к одной строке меня выкинет в except или поток просто завершится или ничего не будет?Обращения к списку из любого потока - readonly?
Никуда не выкинет и ничего не будет.
Но! Если добавляет, корректирует значения, удаляет третий поток - список должен быть потокобезопасным для всех потоков.

NZegдва потока работают с TStringList
Первый поток считал первую строку - увеличил кол-во считанных строкВот здесь я ничего не понял! Как работают? Откуда считал? Куда положил? Где увеличил?
NZegИ так они поочерёдно строки считывают.
Т.е. к одной и той же строке оба они не могут обратиться.Чем это гарантировано?
NZegДа, счётчик синхронизировал.Какой счетчик? С чем синхронизировал?
...
Рейтинг: 0 / 0
11.10.2018, 06:12
    #39715886
krapotkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
как обычно, автор придумывает кривой алгоритм и пытается его реализовать

на самом деле обычно нужно создать поток, выдать ему ОДНУ строку из и запустить его
таких потоков создать N штук
при окончании работы потока в событии OnTerminate проверить, все ли строки обработаны, если нет, запустить новый поток с очередной строкой

и не надо ничего выдумывать ни с критическими секциями, ни с другими видами cинхронизаций
...
Рейтинг: 0 / 0
11.10.2018, 07:30
    #39715894
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
NZegдва потока работают с TStringList
Первый поток считал первую строку - увеличил кол-во считанных строк
Проще брать чёт-нечёт без всяких счетчиков.
...
Рейтинг: 0 / 0
11.10.2018, 08:22
    #39715902
MBo
MBo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
NZeg,

А какова реальная задача?
...
Рейтинг: 0 / 0
11.10.2018, 11:06
    #39715982
Dimonka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
Возможно автору нужен TMultiReadExclusiveWriteSynchronizer?

http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.TMultiReadExclusiveWriteSynchronizer

Подойдёт как раз для такого запущенного случая доступа к одному ресурсу.
...
Рейтинг: 0 / 0
11.10.2018, 11:15
    #39715990
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
А чего городить странные вещи, если только чтение (я так полагаю, задача - это разгребание очереди заданий), то InterlockedIncrement и всё
...
Рейтинг: 0 / 0
11.10.2018, 14:50
    #39716171
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Потоки
krapotkinв событии OnTerminate проверить, все ли строки обработаны, если нет, запустить новый поток с очередной строкойИ зачем люди пулы потоков придумали? Если можно запустить, прибить, запустить...
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Потоки / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]