Threads "houden" geen "vaste" monitoren op de manier waarop u misschien denkt. Hier is een uitsplitsing van hoe monitoren en threads werken:
* Monitors: Een monitor is een synchronisatieconstruct dat ervoor zorgt dat slechts één thread toegang heeft tot een kritisch gedeelte van de code tegelijk. Het is een manier om raceomstandigheden en gegevenscorruptie te voorkomen wanneer meerdere threads middelen moeten delen.
* threads: Threads zijn onafhankelijke uitvoeringseenheden binnen een proces. Ze kunnen worden gemaakt en beheerd door het besturingssysteem.
Hoe ze op elkaar inwerken:
1. Het slot verwerven: Wanneer een thread toegang moet krijgen tot een gedeelde bron, moet deze het slot van de monitor verwerven.
2. Exclusieve toegang: Zodra een thread het slot heeft verkregen, heeft deze exclusieve toegang tot het kritieke gedeelte. Andere threads die proberen het slot te verkrijgen, worden geblokkeerd totdat de eerste thread het vrijgeeft.
3. het slot vrijgeven: Wanneer de thread is voltooid met het kritieke gedeelte, geeft deze het slot vrij. Een andere thread kan vervolgens het slot verwerven en de uitvoering voortzetten.
Sleutelpunt: Een thread bevat niet meerdere monitoren tegelijk. Het kan meerdere sloten krijgen, één voor één, maar het kan slechts één slot tegelijk vasthouden.
Voorbeeld:
Stel je twee threads voor, thread A en thread B, die toegang moeten hebben tot dezelfde bankrekening.
* Thread A wil geld storten.
* Thread B wil geld opnemen.
Een monitor wordt gebruikt om het saldo van de bankrekening te beschermen:
1. Draad A verwerft het vergrendeling van de monitor.
2. Draad A voert de afzettingsbewerking uit.
3. Draad a geeft het slot vrij.
4. Draad B verwerft het vergrendeling van de monitor.
5. Thread B voert de ontwenningbewerking uit.
6. Draad B geeft het slot vrij.
Dit voorkomt dat beide threads het accountsaldo tegelijkertijd wijzigen, waardoor gegevensconsistentie wordt gewaarborgd.
Laat het me weten als je nog andere vragen hebt! |