Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 2.660 pregleda

Najnovija ↓

Sinhronizacija liste 22.11.2006. u 19:30 · pre 242 meseca #1
Pozdrav,

Imam jednostavnu listu (sam sam ga pravio) i dva threada. Jedan thread ubacuje iteme u listu, a drugi se vrti u krug, pa kad vidi da lista nije prazna onda vadi item i brise ga iz liste. Dakle nista narocito.

Zanima me samo kako da sinhronizujem ovo. Dakle kada ubacujem ili brisem item, treba da uzmem eksluzivno pravo nad listom. Vidim da postoji TCriticalSection, pa sam napravio ovako nesto:
Code:
critical := TCriticalSection.Create;
critical.Enter;
AddItem(ResultList, item);
critical.Leave;
critical.Free;

Jel ovo dobro ovako?
Re: Sinhronizacija liste 22.11.2006. u 21:23 · pre 242 meseca #2
> Zanima me samo kako da sinhronizujem ovo. Dakle kada ubacujem ili brisem item, treba da uzmem eksluzivno pravo nad listom. Vidim
> da postoji TCriticalSection, pa sam napravio ovako nesto:

Pogledaj TThreadList, upravo je tome namenjen.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: Sinhronizacija liste 23.11.2006. u 12:29 · pre 242 meseca #3
Hmm ok, napisao sam ovo u jednom threadu:
Code:
with ResultList.LockList do begin
 try
   for i := 0 to Count-1 do begin
      pok := Items[i];
      if pok^.checking = false then begin
        item := pok;
        break
      end
   end;
 finally
   ResultList.UnlockList;
 end
end;

Znaci lock-ujem listu, pretrazujem i nalazim jedan item, uzimam ga i na kraju otkljucavam listu.
E sad problem je sto, nakon sto program stigne do ResultList.LockList nista vise se ne desava u tom threadu. Pogledao sam u Threads debug prozoru i izgleda da se desava sledece:

1) Na pocetku imam samo jedan thread
2) Kliknem na dugme, naprave se ta dva threada, tako da sada imam 3
3) Program stigne do breakpointa (ResultList.LockList)
4) Kliknem na Step Over i thread nestaje sa liste. Da li je moguce da LockList ubija thread?
5) Nakon ovoga samo onaj drugi thread funkcionise, ovaj je izgleda stvarno ubijen
Re: Sinhronizacija liste 30.11.2006. u 14:14 · pre 242 meseca #5
Citat:
gajo2: 
Zanima me samo kako da sinhronizujem ovo. Dakle kada ubacujem ili brisem item, treba da uzmem eksluzivno pravo nad listom. Vidim da postoji TCriticalSection, pa sam napravio ovako nesto:
Code:
critical := TCriticalSection.Create;
critical.Enter;
AddItem(ResultList, item);
critical.Leave;
critical.Free;

Jel ovo dobro ovako?


Generalno ako ti je to unutar thread-a kada treba da citas, pises, brises onda nije dobro ...

CriticalSection (ili vec critical) bi trebalo da ti je globalna promenljiva.

Kreiras je pre potencialnog koriscenja (najbolje u startapu)

A free-ujes je kad zavrsis ...

Unutar thread-a bi trebalo da bude samo


Code:
critical.Enter;
AddItem(ResultList, item);
critical.Leave;
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme