![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Доступ к данным на чтение из разных потоков
TThread © (2010-09-14 12:48:00)У меня есть менеджер потоков, который в своем конструкторе загружает из вне некоторые параметры. В дальнейшем создаются потоки. Можно ли в потоке читать параметры из менеджера без использования критической секции?
Что-то вроде:
TOptions = record
s: string;
i: Integer;
sl: TStringList;
end;
private
FOptions: TOptions;
public
property Options: TOptions read FOptions;
Или обязательно надо делать так:
private
FOptions: TOptions;
function GetOptions: TOptions;
public
property Options: TOptions read GetOptions;
...
function TMyManager.GetOptions: TOptions;
begin
CS.Enter;
try
Result := FOptions;
finally
CS.Leave;
end;
end;
Nucer (2010-09-14 13:05:00) [1]А со строками никаких проблем быть не может (счетчик ссылок)?
DVM (2010-09-14 12:57:00) [2]Но к методам и свойствам TStringList надо очень внимательно присмотреться, если обращение к ним вызывает изменение каких то внутренних полей, то тогда обращаться нельзя.
Юрий Зотов (2010-09-14 12:57:00) [3]Читать - можно. Данные же при чтении не меняются, поэтому один поток не сможет повлиять на другой.
Но если во время работы потоков любому из них (или самому менеджеру) потребуется эти данные изменить, то будет нужна синхронизация
DVM (2010-09-14 12:55:00) [4]
> Можно ли в потоке читать параметры из менеджера без использования
> критической секции?
Если данные никто менять не будет - читай на здоровье.