|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
21.03.2011, 11:59 | #1 |
Форумчанин
Регистрация: 17.11.2008
Сообщений: 116
|
Многопоточность при работе со списком
Имеется массив целочисленных идентификаторов:
.., 1, 2, 7, 9, 10, 21, 23, ... Задача: перебрать массив в несколько потоков (Поток будет брать из массива значение, подставлять его в get-запрос и отправлять на web-сервер (пишу утилиту для проверки существования картинок на web-сервере)). Собственно вопрос, как скармливать потоку значения массива, чтобы избежать одновременного доступа к ожному и тому же значению массива из других потоков. Все что находил - не фонтан, хотелось бы увидеть грамотный подход к этому вопросу. Наткнулся на похожий вопрос на одном из форумов, там советовали использовать пул потоков. Начал копать в сторону TIdSchedulerOfThreadPool. Описания его работы, примеров использования - ничего не нашел. |
21.03.2011, 12:09 | #2 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Цитата:
|
|
21.03.2011, 12:13 | #3 |
Форумчанин
Регистрация: 17.11.2008
Сообщений: 116
|
для примера, 2 потока работают с массивом A, одновременно и первый и второй взяли элемент N массива A, что делать?.
|
21.03.2011, 12:22 | #4 | |
Заблокирован
Регистрация: 27.05.2010
Сообщений: 1,099
|
Цитата:
Потоки ничего не должны ни откуда "брать" сами, их задача - выполнять расчеты с переданными им потоком-диспетчером параметрами, а не лезть наперегонки кто во что горазд в глобальный массив. Иллюстрация логики потока-диспетчера: Код:
|
|
21.03.2011, 12:24 | #5 |
кривокодер ;)
Форумчанин
Регистрация: 20.06.2008
Сообщений: 707
|
Посмотреть в сторону процедуры синхронизации потоков и в сторону критических секций.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид} |
21.03.2011, 12:55 | #6 | |
Форумчанин
Регистрация: 17.11.2008
Сообщений: 116
|
Цитата:
Вот к примеру: Код:
|
|
21.03.2011, 13:29 | #7 |
кривокодер ;)
Форумчанин
Регистрация: 20.06.2008
Сообщений: 707
|
В данном случае передавать потоку ничего не нужно. Пусть он сам берет из глобальной переменной данные. Чтоб не вышел случай запрета доступа - используйте критические секции во время чтения из переменной.
Код:
НО, есть одно "НО"... Для доступа к этому массиву даже из основного потока желательно так же использовать крит секции.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид} |
21.03.2011, 13:37 | #8 | |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
Цитата:
PHP код:
g_index - глобальная переменная, которой присваивается индекс первого элемента списка - 1 перед запуском потоков.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
Последний раз редактировалось veniside; 21.03.2011 в 13:40. |
|
21.03.2011, 13:55 | #9 | |
Форумчанин
Регистрация: 17.11.2008
Сообщений: 116
|
Цитата:
|
|
21.03.2011, 13:56 | #10 |
кривокодер ;)
Форумчанин
Регистрация: 20.06.2008
Сообщений: 707
|
NieL, я для чего объяснял про критические секции?...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид} |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при работе с потоком | Claster | Помощь студентам | 1 | 14.10.2009 16:06 |
Многопоточность при отправке почты | sanchopansa | Работа с сетью в Delphi | 4 | 04.10.2008 14:57 |
Проблема при работе с БД | HAMMAN | БД в Delphi | 3 | 29.03.2008 14:42 |
Ошибка при работе с БД | malevich | БД в Delphi | 8 | 25.11.2007 15:10 |