Avatar billede nielsheinrichjensen Nybegynder
19. oktober 2003 - 15:49 Der er 5 kommentarer og
1 løsning

proces synkronisering

er der en der kan hjælpe mig med en enkel forklaring på proces synkronisering med test-and-set, wait-and-signal og til sidst semaphores jeg håber at der en der kan hjælpe mig for jeg forstår ikke det jeg har læst i de forskellige bøger der må være en enkel måde at forklare det på

mvh
Niels
Avatar billede soreno Praktikant
19. oktober 2003 - 16:01 #1
Forestil dig 2 processer A og B. De ønsker begge at bruge en resource R (som kun kan bruges af én process ad gangen).

wait/signal:
  A opnår eneret på R
  B prøver at få eneret på R
    Det går ikke, R er optaget
    B sætter sig og venter
  A er færdig med R
    A signalerer at R er ledig
  B rejser sig og prøver at få eneret på R
  [..osv..]
Avatar billede nielsheinrichjensen Nybegynder
19. oktober 2003 - 16:05 #2
tak det hjalp lidt på forståelsen
Avatar billede soreno Praktikant
19. oktober 2003 - 16:11 #3
Ideen er at der i koden er en kritisk sektion, som kræver at have eneret på en resource for at kunne udføres korrekt.

Et eksempel er en tæller.
  A tæller én op - inc()
  B tæller én ned - dec()

kode (Java):
public void inc()
{
[1]  int temp = count;
[2]  count = temp + 1;
}

public void dec()
{
[3]  int temp = count;
[4]  count = temp - 1;
}

Problemet opstår i det øjeblik at
  A kører inc
  Der sker et kontext switch efter linie 1.
  B kører dec
  Kontext switch efter B har kørt dec færdig
  A kører resten af inc

Så vil count få forkert værdi.
Avatar billede nielsheinrichjensen Nybegynder
19. oktober 2003 - 16:20 #4
det begynder at lysne men hvordan fungerer det med semaphores
Avatar billede soreno Praktikant
19. oktober 2003 - 16:27 #5
Løsning på ovenstående problem med en semafor.
Med en binær semafor har man enten adgang eller ikke adgang.

public void inc()
{
[1]  if(semafor.down())
[2]  {
[3]    int temp = count;
[4]    count = temp + 1;
[5]    semafor.up();
[6]  }
}

public void dec()
{
[1]  if(semafor.down())
[2]  {
[3]    int temp = count;
[4]    count = temp - 1;
[5]    semafor.up();
[6]  }
}

semafor.down() får værdien 0 når metoden er kørt.
Hvis der sker et kontext switch inden semafor.up() kaldes så vil der ikke ske noget, da if sætningen fejler.

Ideen er så at up og down metoderne udføres atomisk - dvs. der ikke er mulighed for kontext switch idet variablerne ændres.
Avatar billede nielsheinrichjensen Nybegynder
19. oktober 2003 - 16:30 #6
mange tak for svaret det hjalp gevaldigt på forståelsen nu tror jeg at jeg forstår hvad der sker
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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