Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 17802|Antwoord: 0

[Communicatie] Sluis C #

[Link kopiëren]
Geplaatst op 21-02-2019 09:43:39 | | |
1. Waarom vergrendelen en wat is er vergrendeld?

Wanneer we threads gebruiken, is de meest efficiënte methode natuurlijk asynchroon, dat wil zeggen dat elke thread tegelijkertijd draait, zonder op elkaar te vertrouwen en te wachten. Wanneer verschillende threads echter toegang moeten hebben tot een bepaalde hulpbron, is een synchronisatiemechanisme vereist, dat wil zeggen, bij het lezen en schrijven van dezelfde bron moeten we de bron slechts door één thread tegelijk laten bedienen om ervoor te zorgen dat elke bewerking effectief en direct is, dat wil zeggen, om de atomiciteit van de werking te waarborgen. lock is de meest gebruikte synchronisatiemethode in C#, in het formaat lock(objectA){codeB}.


lock(objectA){codeB} lijkt eenvoudig, maar heeft eigenlijk drie betekenissen, wat essentieel is om het correct te kunnen gebruiken:
1. Is objectA vergrendeld? Zo niet, dan vergrendel ik het, anders wacht ik tot objectA wordt vrijgegeven.
2. Na het vergrendelen kunnen andere threads codeB niet aanroepen of objectA gebruiken tijdens de uitvoering van codeB.
3. Na het uitvoeren van codeB wordt objectA vrijgegeven, en codeB kan door andere threads worden benaderd.

2. Wat is er gebeurd met het slot (dit)?

Laten we naar een voorbeeld kijken:

In de t1-thread roept LockMe lock(this) aan, dat wil zeggen c1 in de hoofdfunctie, en bij het aanroepen van lock(c1) in de hoofdthread moet het wachten tot het lockblock in t1 is uitgevoerd voordat c1 wordt geopend, dat wil zeggen, alle c1-gerelateerde bewerkingen kunnen niet worden voltooid, dus we zien dat zelfs c1. DoNotLockMe() wordt niet uitgevoerd.





Vorig:C# in ArraySegment deel van de array
Volgend:Diepgaande oefening van Spring Boot. Chen Shaojian en SpringBoot onthullen + bouw snel een microservicesysteem
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com