/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste