jak ustrzec się błędu współdzielenia

0

Witam
mam jeden plik (txt) do którego dostęp mają dwa procesy, jeden który sprawdza czy znajduje się w mim szukany ciąg znaku a jesli taki napotka to dopisze <ort>cocnieco </ort>a drugi który dopisuje kolejne linijki...
wygląda on mniej więcej tak:
liczba1 Szukana/Wpisywana;ZwiązanyZNiąTekst#
liczba2 Szukana/Wpisywana;ZwiązanyZNiąTekst#
liczban Szukana/Wpisywana;ZwiązanyZNiąTekst#
Wim że powinienem stworzyc coś ala BeginCriticleSesion albo BeginThred ale (przynajmiej ja to tak zrozumiałem) ma to za zadanie <ort>upożądkować </ort>dostęp kilku procesów do pewnej części kodu [???] a ja w każdym procesie mam oddzieną procedurę dostępu do pliku bo każda musi zrobić co innego
byłbym bardzo wdzięczy gdybyści mogli mi pomóc...
za wszystko z góry dziękuję

0

Można dać Mutex na te wątki, w ten sposób, że każdy z nich będzie czekał aż ten drugi się zakończy, zanim następią dalsze polecenia (operacje na pliku).

var
  hMutex: THandle = 0;

Przed wykonaniem operacji:

  if WaitForSingleObject(hMutex, INFINITE) = WAIT_OBJECT_0 then
  begin
    ...
  end

Po wykonaniu operacji:

ReleaseMutex(hMutex);

Przed odpaleniem wątków:

hMutex := CreateMutex(nil, False, nil);
0

Do synchronizacji między wątkami (nie procesami) służą sekcje krytyczne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1