![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Доброго времени суток!
Возник вопрос следующего плана. Есть сложная структура даных: к примеру Код:
t1=record val1:bool; val2:bool; val3:bool; end; t2=record ar1:array of t1; ar2:array of t1; ar3:array of t1; end; t3=record arr1:array of t2; arr2:array of t2; arr3:array of t2; end; С главного потока части структуры передаются указателем в дочерние потоки которые выполняются параллельно. В дочерних потоках производится только чтение данных из тех структур что им передались, запись НЕ производится. Вопрос: Нужно ли места чтения ограничивать "критическими секциями"? Не будет ли ошибок при одновременном чтении? |
|
#2
|
||||
|
||||
|
Теоретически нет, булева переменная она потоконезависима, а при чтении/записи в массив ты работаешь с булевыми переменныим.
|
|
#3
|
||||
|
||||
|
если еще и главный поток при этом не будет изменять то все будет нормально.
|
|
#4
|
|||
|
|||
|
Булевая переменная с потолка, структура там по больше и типов много.
Основной поток генерирует всю структура(размерности масивов). Отдельный поток изменяет значения, при этом блокирую структуру через Мьютексы, а куча мелких потоков если структура не заблокирована создаются, читают даные и завершаются. Если структура заблокирована потоком записи то потоки чтения ждут пока мьютекс освободится. Так работать будет? |
|
#5
|
||||
|
||||
|
Да, должно работать.
|
| Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение: | ||
relline (31.07.2013)
| ||
|
#6
|
|||
|
|||
|
спасибо за помощь
|