Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2011, 14:09   #11
NieL
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 116
По умолчанию

Цитата:
Сообщение от Johnson Посмотреть сообщение
NieL, я для чего объяснял про критические секции?...
я к тому, что может правильнее обойтись без чтения из глобальной переменной, а перед созданием потоков разбить массив на количество потоков и передать каждому создаваемому свой массив (таким образом каждый будет работать со своим массивом в рамках потока), тогда не понадобиться использовать критические секции и InterlockedIncrement()
NieL вне форума Ответить с цитированием
Старый 21.03.2011, 14:12   #12
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

1)Поток должен что-то возвращать?
2)КАК Вы собираетесь в поток массив скармливать? Тип массива должен быть объявлен как класс и экземпляры егодолжны быть объявлены глобально, чтоб можно было передать его потоку...
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 21.03.2011, 14:16   #13
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> с точки зрения организации кода, обращение из потока к данным извне (в данном случае к глобальной переменной) будет корректно, не будет противоречить логике многопоточности?

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


> Может разделить массив на количество потоков и каждому в конструктор скормить свой массив?

да, можно просто передавать каждому потоку начальный и конечный индексы из массива для работы. Единственная проблема в том, что часть потоков может выполнить свою работу раньше остальных, и будут простаивать.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 21.03.2011, 15:13   #14
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Нахрен тут крит.секции - совершенно не понятно.
Массив УЖЕ сформирован (обратного утверждения не последовало), никто изменять его не собирается. Осн.поток (или любой иной поток-"диспетчер") берт любой доп.поток из пула свободных или создает новый доп.поток и передает ему параметром очередной элемент массива (по ссылке или по значению передает - по барабану, ибо доп.потгок переданный ему эл-т массива изменять НЕ собирается).
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при работе с потоком 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