F8 - Monitors Flashcards
En monitor är:
Monitor är en synkroniseringsmekanism som tillåter tråder att ha Mutual Exclusion och möjligheten att vänta på fortsatt exekvering tills förbestämda villkor har uppnåtts.
En monitor kan vara en klass, ett objekt eller en modul. En kodsektion som låses med nyckelordet “synchronized” räknas som en monitor.
Vad är viktigt att vara noggrann med när man använder semaforer?
Det är viktigt att hålla koll på alla kall till acquire() och release() så att alla permits som fås också släpps innan applikationen avslutas.
Vilka metoder (i Java) används för villkorssynkronisering?
wait(), notify() och notifyAll().
Vad innebär det att “äga” en monitor?
När en tråd har fått tillgång till en monitors synkroniserade metod och exekverar inuti den kallas det att tråden “äger” monitorn. Tråden “äger” monitorn tills den punkt den släpper låset till den och lämnar den kritiska sektionen.
Vad inkapslar en monitor?
Data - detta kräver att instansvariabler är privata och därför endast tillgängliga inuti monitorn.
Metoder - tillgång till delad data sker också inuti monitorn.
Synkronisering - vilket sker genom villkorsvariabler genom deras wait och signal-förmågor. (Trådar kan sätta sig själva i en väntkö för att sedan bli väckta av andra trådar när ett villkor blir sant eller datans tillstånd ändras).
Skillnaden mellan trådar och monitorer kan beskrivas genom kategorisering av objekt som antingen aktiva eller passiva. Vilken är vilken?
- Aktiva: objekt som initierar en handling (trådar).
- Passiva: objekt som svarar på handlingar (monitorer)
Vad är en villkorsvariabel (condition variable)?
En variabel som som erbjuder synkronisering mellan trådar. Medan en tråd väntar på att ett villkor ska uppfyllas kan andra trådar exekvera. Generellt har en villkorsvariabel två eller tre metoder kopplade till sig:
- wait(): Om en resurs inte är ledig, går tråden in i variabelns väntkö och sover. Detta släpper låset.
- notify(): Väcker upp en tråd som väntar i variabelns kö. Denna tråd återupptar exekvering direkt efter låsets släpps.
- notifyAll(): Väcker alla sovande trådar i variabelns kö.- Vilken tråd som får möjlighet att köra avgörs av CPU:n.
Vad behöver en monitor bestå av?
Den behöver ett låsobjekt för att säkerställa Mutual Exclusion och en eller flera villkorsvariabler för synkronisering inuti monitorn.