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

Вниз

Многократное вхождение в критическую секцию.   Найти похожие ветки 

 
Riply ©   (2007-02-02 04:58) [0]

Здравствуйте !
Объясните, пожалуйста, как надо делать и, главное, - почему ?
Допустим, в классе мы определили следующие две процедуры:
function TLockFile.WriteDirect(const Buffer; const Count: DWord): DWord;
begin
Lock;// Входим в критическую секцию
try
 Result := File_Write(FHandle, Buffer, Count);
finally
 Unlock;
end;
end;

function TLockFile.SingleWrite(const aFileName: string; const Buffer; const Count: DWord): DWord;
begin
Lock;
try
 if OpenLockFile(aFileName) <> INVALID_HANDLE_VALUE then
  try
   Result := WriteDirect_(Buffer, Count);
  finally
   CloseLockFile;
  end;
finally
 UnLock;
end;
end;


Имеет ли смысл переписать их следующим образом ?
function TLockFile.WriteDirect(const Buffer; const Count: DWord; SetLock: Boolean): DWord;
begin
if SetLock then Lock;
try
 Result := File_Write(FHandle, Buffer, Count);
finally
 if SetLock then Unlock;
end;
end;

function TLockFile.WriteSingle(const aFileName: string; const Buffer; const Count: DWord): DWord;
begin
Lock;
try
 if OpenLockFile(aFileName) <> INVALID_HANDLE_VALUE then
  try
   Result := WriteDirect_(Buffer, Count, False);
  finally
   CloseLockFile;
  end;
finally
 UnLock;
end;
end;

P.S. Работа с файлом взята для примера. Функции могут делать что угодно.


 
Separator ©   (2007-02-02 07:15) [1]

Смысла не имеет, по идее в проседуре Lock должна идти проверка на LOCK|UNLOCK, а не в каждой процедуре которые их вызывают


 
Сергей М. ©   (2007-02-02 08:20) [2]


> Имеет ли смысл


Не имеет.


> почему ?


Потому что кр.секция имеет сч-к блокировок. В пределах одного и того же потока вход в секцию инкрементирует сч-к, а выход из секции , соответственно, декрементирует. Другой поток не войдет в секцию до тех пор пока сч-к блокировок не станет равным нулю.


 
evvcom ©   (2007-02-02 08:56) [3]

> [0] Riply ©   (02.02.07 04:58)

Это типа найди 7 отличий? Поражаюсь...


 
Riply ©   (2007-02-02 13:26) [4]

Спасибо. Разобралась. :)



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

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

Наверх





Память: 0.45 MB
Время: 0.037 c
15-1169959653
SerJaNT
2007-01-28 07:47
2007.02.18
Шаблонизатор TemplatePower


15-1170093439
@!!ex
2007-01-29 20:57
2007.02.18
ГРафическая оболочка к Линукску.


2-1170374503
Ref
2007-02-02 03:01
2007.02.18
Memo и Word


5-1148857887
Delphi_uzer
2006-05-29 03:11
2007.02.18
обработчик события OnClick для динамически созданых компонентов


1-1167139043
DelphiLexx
2006-12-26 16:17
2007.02.18
Присоединить статическую библиотеку *.lib





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский