|
|
|
Потоки
|
|||
|---|---|---|---|
|
#18+
два потока работают с TStringList Первый поток считал первую строку - увеличил кол-во считанных строк И так они поочерёдно строки считывают. Т.е. к одной и той же строке оба они не могут обратиться. Нужно ли этот код добавлять в критическую секцию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 21:13 |
|
||
|
Потоки
|
|||
|---|---|---|---|
|
#18+
NZeg, да хоть и к одной строке. если только оба читают. и никто параллельно не пишет. а вот счетчик надо синхронизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 22:01 |
|
||
|
Потоки
|
|||
|---|---|---|---|
|
#18+
Да, счётчик синхронизировал. а если код в потоке заключить в try except, при одновременном обращении двух потоков к одной строке меня выкинет в except или поток просто завершится или ничего не будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 22:08 |
|
||
|
Потоки
|
|||
|---|---|---|---|
|
#18+
NZegа если код в потоке заключить в try except, при одновременном обращении двух потоков к одной строке меня выкинет в except или поток просто завершится или ничего не будет?Обращения к списку из любого потока - readonly? Никуда не выкинет и ничего не будет. Но! Если добавляет, корректирует значения, удаляет третий поток - список должен быть потокобезопасным для всех потоков. NZegдва потока работают с TStringList Первый поток считал первую строку - увеличил кол-во считанных строкВот здесь я ничего не понял! Как работают? Откуда считал? Куда положил? Где увеличил? NZegИ так они поочерёдно строки считывают. Т.е. к одной и той же строке оба они не могут обратиться.Чем это гарантировано? NZegДа, счётчик синхронизировал.Какой счетчик? С чем синхронизировал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 00:17 |
|
||
|
Потоки
|
|||
|---|---|---|---|
|
#18+
как обычно, автор придумывает кривой алгоритм и пытается его реализовать на самом деле обычно нужно создать поток, выдать ему ОДНУ строку из и запустить его таких потоков создать N штук при окончании работы потока в событии OnTerminate проверить, все ли строки обработаны, если нет, запустить новый поток с очередной строкой и не надо ничего выдумывать ни с критическими секциями, ни с другими видами cинхронизаций ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 06:12 |
|
||
|
Потоки
|
|||
|---|---|---|---|
|
#18+
NZegдва потока работают с TStringList Первый поток считал первую строку - увеличил кол-во считанных строк Проще брать чёт-нечёт без всяких счетчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 07:30 |
|
||
|
Потоки
|
|||
|---|---|---|---|
|
#18+
NZeg, А какова реальная задача? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 08:22 |
|
||
|
Потоки
|
|||
|---|---|---|---|
|
#18+
Возможно автору нужен TMultiReadExclusiveWriteSynchronizer? http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.SysUtils.TMultiReadExclusiveWriteSynchronizer Подойдёт как раз для такого запущенного случая доступа к одному ресурсу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 11:06 |
|
||
|
Потоки
|
|||
|---|---|---|---|
|
#18+
А чего городить странные вещи, если только чтение (я так полагаю, задача - это разгребание очереди заданий), то InterlockedIncrement и всё ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 11:15 |
|
||
|
|

start [/forum/topic.php?fid=58&tid=2040294]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
184ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 514ms |

| 0 / 0 |
