Форум: "Начинающим";
Текущий архив: 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.05 c