Вниз
Скачать: CL | DM;

многопоточный доступ к файлу   Найти похожие ветки 

← →
joo   (2006-08-07 17:19) [0]

Программа использует большой текстовый файл, с примерным содержанием:
param;param;param...
param;param;param...
param;param;param...


Интересует, как лучше и быстрее организовывать доступ к этому файлу, если в программе сразу несколько потоков будет пытаться открыть, прочитать, записать в файл. Я думаю, что надо каким-то образом блокировать файл при доступе из какого-то потока, а по завершении, разблокировать, дабы дать возможность остальным потоком взаимодействовать с файлом.
Возможные варианты взаимодействия -- это: удаление строки, добавление строки, перезапись строки.

Вот и интересует как лучше и быстрее, какие лучше файловые ф-ии использовать из delphi? или сразу на api?


← →
Сергей М. ©   (2006-08-07 17:23) [1]


> или сразу на api?


Это еще зачем ?)


← →
clickmaker ©   (2006-08-07 17:25) [2]

ну апи хоть иногда всего на несколько милисек, но по-любому быстрей.
для разделения доступа лучше TcriticalSection - самый быстрый из всех объектов синхронизации
CS.Enter;
try
 // что-то делаешь с файлом
finally
 CS.Leave;
end;

для ускорения лучше файл открыть один раз и держать открытым (если возможно)


← →
Joe_from_smart   (2006-08-08 01:38) [3]

Добавлю, что блокировать нужно только на время записи, чтение можно оставить в покое :)


← →
Пусик ©   (2006-08-08 10:14) [4]


> Joe_from_smart   (08.08.06 01:38) [3]
> Добавлю, что блокировать нужно только на время записи, чтение
> можно оставить в покое :)


Это вряд ли.


← →
DiamondShark ©   (2006-08-08 11:39) [5]

Написать обёртку


TFileAccessor = class
private
 FHandle: THandle;
 FSynchronizer: TMultiReadExclusiveWriteSynchronizer;
 ...
public
 procedure ReadLine(...);
 procedure WriteLine(...);
end;

...

procedure TFileAccessor.ReadLine;
begin
 FSynchronizer.BeginRead;
 try
   // ...
 finally
   FSynchronizer.EndRead;
 end
end;

procedure TFileAccessor.WriteLine;
begin
 FSynchronizer.BeginWrite;
 try
   // ...
 finally
   FSynchronizer.EndWrite;
 end
end;



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.033 c
2-1154607940
FFFF
2006-08-03 16:25
2006.08.27
Размер отчета


15-1154271463
antonn
2006-07-30 18:57
2006.08.27
Комментарии модератора


1-1152725669
Pavel__
2006-07-12 21:34
2006.08.27
Убрать иконку из заголовка окна


1-1152890545
oleggar
2006-07-14 19:22
2006.08.27
как упростить ввод ?


15-1154573387
Пользоват.
2006-08-03 06:49
2006.08.27
Помогите переключить раскладку при входе в виндовс.




   Наверх