Avatar billede sluppermanden Nybegynder
10. november 2003 - 14:27 Der er 6 kommentarer og
1 løsning

Et teoretisk spørgsmål om Synchronized !

Vi sidder i en principiel diskussion om synchronized.

Hvad sker der når en tråd ankommer til en metode som er synchronized, og hvor der allerede er en anden tråd der inde.

Vil den nye tråd blive ”blocked” altså gå i wait position eller vil den gå i ready og prøve igen.
Avatar billede erikjacobsen Ekspert
10. november 2003 - 14:30 #1
Det du foreslår vil jo næsten have samme funktionalitet. Den der med
at prøve igen og igen og igen... vil bare bare bruge flere ressourcer.

Men "prøve igen og igen og igen ..." er uretfærdig. Det er et lotteri
hver der kommer til først. Det dur ikke. Prøv at forestille dig slagsmålet
ved kasseapparaterne i Bilka, hvis det var dagens standard.

Nej - de bliver lagt en i superretfærdig kø, og kommer til efter tur. De
står altså i Wait.
Avatar billede jakoba Nybegynder
10. november 2003 - 14:41 #2
Eb anden grund til at 'sætte i kø' er at så venter de virkelig. hvis de hele tiden prøvede og prøvede ville de brug processortid som den tråd der kom først har brug for for at blive ekspedereret og gå sin vej så den næste kan komme til.
Avatar billede sluppermanden Nybegynder
10. november 2003 - 14:51 #3
Hvad sker der når først tråd hopper ud af af metoden. Vil den så kalde en notify eller notifyAll så kø'en bliver vækket ?
Avatar billede erikjacobsen Ekspert
10. november 2003 - 15:10 #4
Hmm, hvad der i virkeligheden sker?? Det ved jeg ikke. Men dem der venter på
at komme ind kan jo gå i gang umiddelbart, så det er vel en notify.

Du tænker på monitorer generelt, når man inde i en monitor-metode har sagt
wait. Der ved jeg ikke hvad der sker.
Avatar billede sluppermanden Nybegynder
10. november 2003 - 15:25 #5
Ja, det er netop Monitor jeg tænker på. Når man står i Entry Sættet er man så i "Ready to Run" eller "wait".
Avatar billede jakoba Nybegynder
10. november 2003 - 15:26 #6
Det kan gøres på flere måder. den almindeligste er at have een enkelt hægtet liste plus en signalvariabel ved hver funktion der er sykroniseret.

signalvariablen er til at teste om der er nogen deringe allerede, hvis der er hænger tråden sig op i den hægtede liste. ellers bliver signalvariablen sat til 'optaget' og tråden går ind.
efter brug, hvis der er nogen ventende tråde i listen, bliver den første ventende tråd aktiveret, hvis ikke sættes signalvariablen til 'ledig'.
Avatar billede sluppermanden Nybegynder
07. februar 2004 - 23:59 #7
Takker for diskusion, lukker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester