|
| Pthreads Fra : Jeppe Vesterbæk |
Dato : 01-06-03 10:03 |
|
Hej
Jeg er ved at lave en mindre opgave til en eksamen... Jeg skal lave en meget
simpel resource allokator (alloc og free). Forskellige tråde skal kunne
kalde disse funktioner. Jeg bruger pthreads det dette.
Mit problem er: Hvis en tråd forespørger flere resourcer end der pt. er til
rådighed, så skal denne blokkeres. Dette kan jeg fint gøre med en
pthread_cond_wait, MEN når så flere resourcer er blevet frigivet skal det
undersøges, om en blokeret tråd nu kan blive aktiveret (wake up). Dette
gøres ved at betragte forskellige allokeringsønsker for f.eks. at undgå
deaklock. Jeg vil altså gerne kunne vække en bestemt, given tråd. Er dette
muligt, eller kan en pthread kun vækkes med pthread_cond_signal?
/Jeppe (som gerne ville have funktionerne block_pthread(pthread_t *
myThread) og wakeup_pthread(pthread_t * myThread)
| |
Michael Rasmussen (01-06-2003)
| Kommentar Fra : Michael Rasmussen |
Dato : 01-06-03 10:35 |
|
On Sun, 01 Jun 2003 11:02:32 +0200, Jeppe Vesterbæk wrote:
>
> /Jeppe (som gerne ville have funktionerne block_pthread(pthread_t *
> myThread) og wakeup_pthread(pthread_t * myThread)
Hej Jeppe,
Se denne artikel:
http://dis.cs.umass.edu/~wagner/threads_html/tutorial.html. Denne
beskriver, hvordan du kan få dine ønsker opfyldt. Trickket er at
implementere en simpel semaphorstyring.
--
Hilsen/Sincerely, Michael Rasmussen
En windows admin er en person, for hvem den største bedrift er, at
lave konfiguration af serveren med trial and error via en gui.
| |
Jeppe Vesterbæk (01-06-2003)
| Kommentar Fra : Jeppe Vesterbæk |
Dato : 01-06-03 11:02 |
|
> Se denne artikel:
> http://dis.cs.umass.edu/~wagner/threads_html/tutorial.html. Denne
> beskriver, hvordan du kan få dine ønsker opfyldt. Trickket er at
> implementere en simpel semaphorstyring.
Hej Michael
Den har jeg også kigget på ... men kan stadig ikke se, hvordan jeg kan vække
blokerede tråde i en af mig dikteret rækkefølge. Hvis nu f.eks. tråd A, B og
C er blockerede, så vil jeg meget gerne f.eks. kunne wakeup(B)...
/Jeppe
| |
Rasmus Christian Kaa~ (01-06-2003)
| Kommentar Fra : Rasmus Christian Kaa~ |
Dato : 01-06-03 11:06 |
|
> Hej Michael
>
> Den har jeg også kigget på ... men kan stadig ikke se, hvordan jeg kan
vække
> blokerede tråde i en af mig dikteret rækkefølge. Hvis nu f.eks. tråd A, B
og
> C er blockerede, så vil jeg meget gerne f.eks. kunne wakeup(B)...
Du kunne smæde en frisk timer-baseret scheduler ind i din kode.
| |
Michael Rasmussen (01-06-2003)
| Kommentar Fra : Michael Rasmussen |
Dato : 01-06-03 11:38 |
|
On Sun, 01 Jun 2003 12:06:16 +0200, Rasmus Christian Kaae wrote:
>> Hej Michael
>>
>> Den har jeg også kigget på ... men kan stadig ikke se, hvordan jeg kan
> vække
>> blokerede tråde i en af mig dikteret rækkefølge. Hvis nu f.eks. tråd A, B
> og
>> C er blockerede, så vil jeg meget gerne f.eks. kunne wakeup(B)...
>
> Du kunne smæde en frisk timer-baseret scheduler ind i din kode.
Hvad med en kø kombineret med timestamps?
Hvis ressource ønskes tildelt
undersøg om der er ventede tråde
hvis der er ventede tråde
ekspeder disse først
sæt ønske på kø
ellers
tildel ressource
To algoritmer man med fordel kan se på til forhindring af deadlock, er:
wait/die
wound wait
--
Hilsen/Sincerely, Michael Rasmussen
En windows admin er en person, for hvem den største bedrift er, at
lave konfiguration af serveren med trial and error via en gui.
| |
Rasmus Christian Kaa~ (01-06-2003)
| Kommentar Fra : Rasmus Christian Kaa~ |
Dato : 01-06-03 11:48 |
|
> > Du kunne smæde en frisk timer-baseret scheduler ind i din kode.
> Hvad med en kø kombineret med timestamps?
>
> Hvis ressource ønskes tildelt
> undersøg om der er ventede tråde
> hvis der er ventede tråde
> ekspeder disse først
> sæt ønske på kø
> ellers
> tildel ressource
og tada du har beskrevet, mere eller mindre, en round-robin scheduler
/rasmus der kaster om sig med frække buzzwords
| |
Jeppe Vesterbæk (01-06-2003)
| Kommentar Fra : Jeppe Vesterbæk |
Dato : 01-06-03 11:51 |
|
> Hvad med en kø kombineret med timestamps?
>
> Hvis ressource ønskes tildelt
> undersøg om der er ventede tråde
> hvis der er ventede tråde
> ekspeder disse først <---- Ja, men så skal de også "vækkes" først. Dette
kan jeg umiddelbart kun se gjort ved at have en semafor/condition variabel
pr. tråd. Synes umiddelbart ikke er en så pæn løsning.
> sæt ønske på kø
> ellers
> tildel ressource
>
> To algoritmer man med fordel kan se på til forhindring af deadlock, er:
> wait/die
> wound wait
ok, mange tak
/Jeppe
| |
N/A (12-06-2003)
| Kommentar Fra : N/A |
Dato : 12-06-03 14:10 |
|
| |
Jeppe Vesterbæk (12-06-2003)
| Kommentar Fra : Jeppe Vesterbæk |
Dato : 12-06-03 14:10 |
|
> ville egentlig også regne med at en alm. semafor kø ville gøre tricket !!!
Jeps, det var også sådan, jeg endte med at gøre det ... lavede min egen
semafor-struct m. mutex_stick og condition_variable. Og så smed jeg en
pthread og en semafor i en ny struct, så hver tråd havde en semafor til at
styre, om det kørte eller ej. Det virkede også fint, men synes stadig det er
mærkeligt, at man ikke bare kan block/sustend(thread) og wakeup(thread)...
/Jeppe
| |
|
|