Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Вниз

Простенький вопрос по thread safe реализации   Найти похожие ветки 

 
Empleado ©   (2007-03-12 14:44) [0]

Раздирают сомнения.
Будет ли вот такая обертка TStringList"у потокобезопасной:
Вариант I.
TThreadSafeStringList = class
 private
   FStringList: TStringList;
   FLock: TCriticalSection;
 public
   ...
   function Add(const S: string): Integer;
 end;

function TThreadSafeStringList.Add(const S: string): Integer;
begin
 FLock.Enter;
 try
    Result := FStringList.Add(S)
 finally
    FLock.Leave
 end
end;


Вызов:
var MyList: TThreadSafeStringList;
   MyForm: TMyForm;

procedure TMyForm.MsgToLog(const Msg: string);
begin
 MyList.Add(Msg)
end;


Или же сначала надо получить Lock, а уже затем вызывать методы? Таким образом:
Вариант II.
TThreadSafeStringList = class
 private
   FStringList: TStringList;
   FLock: TCriticalSection;
 public
   ...
   function Add(const S: string): Integer;
   procedure LockList;
   procedure UnlockList;
 end;

Вызов:
procedure TMyForm.MsgToLog(const Msg: string);
begin
 MyList.LockList;
 try
    MyList.Add(Msg)
 finally
    MyList.UnlockList
 end
end;

Или же оба варианта имееют место быть?

Спасибо.
Всего доброго.


 
Сергей М. ©   (2007-03-12 14:53) [1]


> Или же оба варианта имееют место быть?


Или.
Все зависит от твоей фантазии.

По кр.мере, "фантазии" Борланда в части TThreadList сродни твоим для варианта с "или же"


 
Джо ©   (2007-03-12 15:13) [2]

Вариант II — ничем, кажется, не оправданная головная боль.


 
vl_chel ©   (2007-03-12 15:17) [3]

Самый простой способ использовать критические секции
Как уже упоминалось ранее см реализацию класса TThreadList
Если хочешь иметь потокобезопасный список строк напиши свой класс наследник отTStringList и переопредели методы, которые нуждаются в защите доступа из разных потоков


 
Empleado ©   (2007-03-12 16:00) [4]

Т.е., и в первом и во втором вариантах, у меня всегда есть гарантия, что при вызове функции Add(const S: string), например из трех-пяти разных потоков одновременно, const S будет добавлена в StringList всегда такой, как предусмотрено данным вызовом данного потока (имеется в виду момент до входа в критическую секцию в "Вариант I" в function Add(const S: string): Integer)?

Спасибо.


 
Сергей М. ©   (2007-03-12 16:03) [5]


> Empleado ©   (12.03.07 16:00) [4]


Да, концептуальной разницы между вариантами 1 и 2 нет.


 
Empleado ©   (2007-03-12 16:08) [6]

Большое спасибо всем.
Вопрос закрыт.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.04 c
2-1176576148
unregistered_member
2007-04-14 22:42
2007.05.06
Очистить строку от спецсимволов


2-1176723054
bulavkin
2007-04-16 15:30
2007.05.06
Взаимодействие с другими приложениями


2-1176444828
trula
2007-04-13 10:13
2007.05.06
excel вставка рисунка под нужным углом в нужную точку


15-1176086431
Slider007
2007-04-09 06:40
2007.05.06
С днем рождения ! 9 апреля


15-1175953193
Pazitron_Brain
2007-04-07 17:39
2007.05.06
Запрет ресурсов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский