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

Bekijken: 30344|Antwoord: 2

[Bron] C# schroefdraadveiligheid met slot

[Link kopiëren]
Geplaatst op 13-06-2016 17:26:25 | | |

Als je code in een proces zit waarbij meerdere threads tegelijk draaien, kan het zijn dat de code tegelijkertijd draait. Als het resultaat van elke run hetzelfde is als dat van een enkele thread, en de waarden van andere variabelen hetzelfde zijn als verwacht, is het thread safe.
Met andere woorden, de interface die door een klasse of programma wordt geleverd is atomair voor threads of het wisselen tussen meerdere threads leidt niet tot ambiguïteit in het uitvoeringsresultaat van de interface, wat betekent dat we geen rekening hoeven te houden met synchronisatie.
Threadveiligheidsproblemen worden veroorzaakt door zowel globale als statische variabelen.
Als elke thread alleen leesoperaties heeft voor globale en statische variabelen, maar geen schrijfoperaties, is deze globale variabele over het algemeen thread-veilig; Als meerdere threads tegelijkertijd lees- en schrijfoperaties uitvoeren op een variabele, is threadsynchronisatie meestal vereist, anders kan dit de threadbeveiliging beïnvloeden.

Het doel van lock is om gelijktijdige bewerkingen te voorkomen bij multithreaded uitvoering, en objecten van het referentietype lock laten slechts één thread tegelijk in het vergrendelde gebied opereren.

Lock kan slechts één referentietypevariabele vergrendelen, namelijk een adres vergrendelen




Er is een verschil tussen de resultaten van het draaien met en zonder locking:

Na het vergrendelen: de waarde van i zal één voor één dalen, er zullen geen sprongen zijn, geen herhaalde output, tot de waarde van 0;

Geen lock: de waarde output van i springt, discontinu afnemend, en kan ook een -1 waarde uitvoer hebben;

Reden: Na het toevoegen van een lock kan slechts één thread tegelijk de code in het vergrendelde gebied uitvoeren, en beide threads worden in volgorde uitgevoerd, dus er zal geen onderbroken output zijn.




Vorig:Gebruiker uitgeschreven save-dialoog (MS Visual Database Tools)
Volgend:Een mooie DBHelper-klasse die opgeslagen procedures uitvoert
Geplaatst op 14-06-2016 10:53:36 |
 Huisbaas| Geplaatst op 10-02-2022 09:18:58 |
.NET/C# Lock Principle Monitor biedt een diepgaande uitleg
https://www.itsvse.com/thread-9633-1-1.html
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