C# objectgeoriënteerd programmeren biedt veel gebruiksvriendelijke operatieklassen, dit StringDictionary is een verzameling klassen die gespecialiseerd zijn in het opslaan van strings als sleutels en waarden, de betekenis van deze klasse is: C# weet dat string in het waardetype vrij veel wordt gebruikt, andere waardetypes kunnen ook worden omgezet in overeenkomstige stringtypes, dit is de betekenis van deze collectie, maar je kunt nog steeds andere collectieobjecten gebruiken om het te vervangen, let op één punt, Als het stringopslag is, kan dit geheugenverlies verminderen en de tijd die het uitvoeren van het programma verkorten
SyncRoot kan worden gebruikt om toegang tot het StringDictionary te synchroniseren
Om het maar bot te zeggen: het is het concept van lock, laten we een programma schrijven om het te testen:
De code is als volgt:
We hebben twee threads tegelijk om data toe te voegen aan het StringDictionary-woordenboek,
Het verschil in uitvoeringstijd tussen de eerste thread en de tweede thread is één seconde, om het tijdsverschil te vergroten en te voorkomen dat de uitvoering te snel verloopt.
Je ziet dat de threads naar de twee methoden zijn gegaan, en bij het toevoegen van het tweede datastuk wachten ze tot de eerste data werd toegevoegd voordat ze de tweede data toevoegden, en de opteltijd is erg snel.
Hieronder schrijven we het op een andere manier om het beter te begrijpen:
3 threads worden geopend, de data wordt toegevoegd, en de 3 threads worden bijna tegelijk uitgevoerd, maar wanneer de data wordt toegevoegd, is elk 10 seconden uit elkaar.
Samenvattend: bij multithreaded toegang kunnen we SyncRoot gebruiken om threadbeveiliging te waarborgen
|