Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.07.2013, 10:34
relline relline вне форума
Прохожий
 
Регистрация: 28.05.2012
Сообщения: 4
Репутация: 10
Вопрос Совместнай доступ к переменным.

Доброго времени суток!

Возник вопрос следующего плана.

Есть сложная структура даных:
к примеру
Код:
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  
Старый 31.07.2013, 11:09
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Теоретически нет, булева переменная она потоконезависима, а при чтении/записи в массив ты работаешь с булевыми переменныим.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
  #3  
Старый 31.07.2013, 12:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

если еще и главный поток при этом не будет изменять то все будет нормально.
__________________
Пишу программы за еду.
__________________
  #4  
Старый 31.07.2013, 13:06
relline relline вне форума
Прохожий
 
Регистрация: 28.05.2012
Сообщения: 4
Репутация: 10
По умолчанию

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

Так работать будет?
  #5  
Старый 31.07.2013, 13:24
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Да, должно работать.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Этот пользователь сказал Спасибо Aristarh Dark за это полезное сообщение:
relline (31.07.2013)
  #6  
Старый 31.07.2013, 13:37
relline relline вне форума
Прохожий
 
Регистрация: 28.05.2012
Сообщения: 4
Репутация: 10
По умолчанию

спасибо за помощь
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:14.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter