Novo

Forum kao aplikacija na telefonu

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

Kako izbjeci dead lock i starvation na konkretnom primjeru

  • 5 odgovora
  • 2.200 pregleda

Najnovija ↓

Kako izbjeci dead lock i starvation na konkretnom primjeru 18.02.2009. u 01:23 · pre 215 meseci #1
Pozdrav svima.

Trenutno pravim jedan program, pa bih htio par savjeta od iskusnijih korisnika. Naime, u mom programu trenutno postoje 3 vazne komponente,

DrawingViewer, Model i Controler.

Model se sastoji od Slojeva, Sloj od Grupa, Grupa od Profila, a Profile od Oblika (Shape: Line, Arc, Ellipse)

Svaka ova klasa (Model, Layer, Group, Profile) implementira Collection interface.

DrawingViewer implementira interface Observer i na svaku promjenu u modelu, ponovo iscrtava model.

E sad, u jednom trenutku je potrebno izvrsiti provjeru ispravnosti modela, koje moze da traje i do nekoliko sekundi. Pri tome aplikacija mora da odgovora na akcije korisnika i da omoguci korisniku dodavanje novih Slojeva, Grupa, Profila itd. Razmisljao sam da tu provjeru uradim u jednoj posebnoj niti, medjutim ostaje sledeci problem: Ako ta nova nit koja vrsi provjeru modela zakljuca model, tada on nece biti dostupan komponenti DrawingViewer i uopste aplikaciji jer ce ta komponenta koja se vrti na event dispatching thread pokusati isto taj model da zakljuca i onda ce morati da ceka dok prva nit na kojoj se vrsi provjera modela ne zavrsi posao, iz cega proizilazi da ce se program ponasati isto kao da sam provjeru vrsio i na EDT.

Kakvu strategiju ovde primjeniti da bi se izbjeglo "gladovanje" ED niti?
Potpis
...
Re: Kako izbjeci dead lock i starvation na konkretnom primjeru 18.02.2009. u 10:02 · pre 215 meseci #2
Ne znam zašto bi hteo da dozvoliš istovremenu validaciju i editovanje nekih objekata kad oni u svakom trenutku mogu promeniti validnost.
Po ovome što si napisao logično je da korisniku blokiraš rad ( http://java.sun.com/docs/books...swing/components/progress.html ) dok se ne odradi provera ispravnosti.
Re: Kako izbjeci dead lock i starvation na konkretnom primjeru 18.02.2009. u 12:14 · pre 215 meseci #3
Hmmm, ideja za to mi je pala kada sam vidio da dok ja kuckam kod u NetBeans-u on u pozadini stalno taj fajl kompajlira i javlja mi greske.

Ok, mogu ja da blokiram izmjene na tome, ali sta ako kontrola dobije zahtjev za ponovnim iscrtavanjem. Tada ce pokusati da zakljuca model i opet imam isti problem.
Potpis
...
Re: Kako izbjeci dead lock i starvation na konkretnom primjeru 19.02.2009. u 09:18 · pre 215 meseci #6
NetBeans, ako radi nešto u pozadini, radi na kodu koji ti ne menjaš. Kada prekineš kucanje može da pokrene proveru tvog novog koda.

Heh... Sad mi pade na pamet. Pa ovo liči na "readers-writers" problem u sinhronizaciji :)

Ti si "writer".
NetBeans je "reader".

:D
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme