Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

Потокобезопасный класс   Найти похожие ветки 

 
Fktrc ©   (2004-11-25 06:09) [0]

Реализую сабж следующим образом:

  TSafeThread = class
  private
     fCriticalSection: TRTLCriticalSection;
     fField1: Integer;
     fField2: String;
     fField3: TextFile;
     function GetField1: Integer;
     procedure SetField1 (NewField: Integer);
     function GetField2: String;
     procedure SetField2 (const NewField: String);
  public
     property Field1: Integer read GetField1 write SetField1;
     property Field2: String read GetField2 write SetField2;
     
     procedure Method1;
     function Method2;
     constructor Create ();
     destructor Destroy; override;
  end; {TSafeThread}

причем
1. в public секции только свойства и методы (никаких переменных)
2. тела абсолютно всех методов класса реализованы вот так:
begin
   EnterCriticalSection (fCriticalSection);
   try
      bla;
      bla;
   finally
      LeaveCriticalSection (fCriticalSection);
   end;
end;

Имеют ли Мастера что-л сказать? Действительно ли такой класс (объект которого создается в одном потоке и используется всеми остальными) будет потокобезопасным или я что-то упустил?


 
Digitman ©   (2004-11-25 08:01) [1]


> или я что-то упустил?


не забудь и про использование КС в деструкторе, это ведь тоже метод

EnterCriticalSection (fCriticalSection);
  try
     ...
     inherited;
  finally
     LeaveCriticalSection (fCriticalSection);
     DeleteCriticalSection (fCriticalSection);
  end;


 
Fktrc ©   (2004-11-25 08:28) [2]

OK, спасибо. Упустил из виду.


 
SVM (Perm)   (2004-11-25 09:45) [3]

CriticalSection - одна для всеx экземпляров.


 
Fktrc ©   (2004-11-25 12:51) [4]

2SVM (Perm)
Почему? Если в конструкторе использовать InitializeCriticalSection(fCriticalSection), то по-моему у каждого экземпляра класса будет своя секция, не пересекающаяся с секциями других экземпляров.



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

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.024 c
6-1096703357
Pat
2004-10-02 11:49
2004.12.12
FTP протокол. Канал данных


3-1100496152
AdmSasha
2004-11-15 08:22
2004.12.12
поиск по маске в базе


6-1092257951
Piter
2004-08-12 00:59
2004.12.12
Посоветуйте с выбором компонента для работы с TCP


3-1100076696
Yurij-7
2004-11-10 11:51
2004.12.12
Информация из DBGrid


3-1099924459
Denisiy
2004-11-08 17:34
2004.12.12
Передать запрос на сервер в строковой переменной.. или как лучше?