Synchronization - Semaphores
12 belangrijke vragen over Synchronization - Semaphores
Wat is het verschil tussen een binaire semafoor en een counting semafoor?
Een binaire semafoor, ook wel mutex lock genoemd, kan slechts twee waarden aannemen ( 0 en 1) en wordt gebruikt om wederzijdse uitsluiting tussen (twee of meer) processen te realiseren.
Een counting semafoor, ook wel algemene semafoor genoemd, kan meerdere waarden aannemen en wordt gebruikt om resources te verdelen of synchronisatie tussen processen te realiseren.
Wat is een 'spin lock'?
Een spin lock is een (lege) herhalingslus waarin een proces wacht tot een ander proces de conditie voor de herhalingslus wijzigt. Dit wachten wordt ook wel 'busy waiting' genoemd.
Wanneer is sprake van een dead lock?
Een dead lock treedt op als twee of meer processen wachten op een gebeurtenis die alleen veroorzaakt kan worden door een van de wachtende processen.
- Hogere cijfers + sneller leren
- Niets twee keer studeren
- 100% zeker alles onthouden
Kan een semafoor uitsluitend positieve waarden aannemen?
Nee, dat hoeft niet. Bij een semafoor met een wachtrij geeft een negatieve semafoor het aantal wachtende processen aan.
Noem twee voordelen van semaforen
- Eenvoudiger te implementeren dan hardware-based oplossingen;
- Geschikt voor het synchroniseren van meer dan twee processen.
Een nadeel van een spin lock is dat het proces tijdens het wachten de CPU bezet houdt. Daar staat echter ook een voordeel tegenover. Welk voordeel is dit?
Er is geen context switch nodig.
Hoe kan een semafoor zonder busy waiting worden geïmplementeerd?
Dit is mogelijk door aan de semafoor een wachtrij toe te voegen. Als een proces moet wachten wordt het aan de wachtrij toegevoegd en verandert de status van het proces in waiting. Als een ander proces de signal-operatie uitvoert wordt een wachtend proces verplaatst van de waiting queue naar de ready queue en verandert de status in ready.
Wat wordt bedoeld met indefinite blocking?
Hiermee wordt bedoeld dat een proces oneindig in een wachtrij moet wachten. Deze situatie wordt ook wel starvation genoemd.
Op welke manier kan priority inversion voorkomen worden?
Dit kan voorkomen worden door middel van priority-inheritance: alle processen die een resource bezet houden waarop een high-priority process moet wachten krijgen tijdelijk een hoge prioriteit.
Aan welke voorwaarden moet de implementatie van de wait- en signal-operatie voldoen?
Beide operaties (in het bijzonder het bijwerken van de semafoor) moeten atomair worden uitgevoerd. Voor de wait-operatie geldt bovendien dat de test in de while-constructie atomair moet zijn.
Wat wordt bedoeld met circulair wachten?
Hiermee wordt de situatie bedoeld waarin elk proces wacht op een gebeurtenis die alleen door een ander wachtend proces kan worden veroorzaakt. Deze situatie resulteert in een deadlock.
Op welke manier kan in Java synchronisatie worden geïmplementeerd?
In Java kan synchronisatie worden gerealiseerd door methoden de aanduiding synchronized te geven. Als een synchronized methode wordt aangeroepen op een bepaald object dan krijgt geen enkele andere thread nog toegang tot die of andere synchronized methoden van dat object. Een geblokkeerde thread komt via de methode wait in een wachtrij terecht en krijgt de status blocked. Middels de methode notify wordt de situatie weer vrijgegeven. De status van de wachtende thread verandert dan van blocked in runnable.
De vragen op deze pagina komen uit de samenvatting van het volgende studiemateriaal:
- Een unieke studie- en oefentool
- Nooit meer iets twee keer studeren
- Haal de cijfers waar je op hoopt
- 100% zeker alles onthouden
![Trustpilot-logo](/images/design_2020/lp/clp-trustpilot-nl.png)