C# lås

C# lås
I C#brukes ofte låsekonstruksjonen for å sikre at ingen prosesser kan legge inn et kodestykke når en annen prosess for øyeblikket kjører (i.e. Ressurser som er etterspurt av mer enn en prosess.) Den andre tråden som prøver å få tilgang til et stykke kode der det allerede kjøres. Å bruke låsen er således en raskere og mer effektiv teknikk for å administrere prosesser i multithreading -programmering. Dette holdet frigjøres når prosessen som for øyeblikket kjører i den delen av koden, har fullført utførelsen, slik at andre prosesser kan fungere i kodestykket. Derfor har vi bestemt oss for å utdype konstruksjonen "lås" i denne C# -koden for våre programmerere som jobber med Ubuntu 20.04 System. Vi startet denne artikkelen med ny filoppretting i skallet.

Eksempel # 01: Uten låsekonstruksjon

La oss komme i gang med denne artikkelens første eksempel for låsebruk i C#. Så vi må lage en C# kodestruktur først. Uten C# standardkodestrukturen fungerer ikke koden vår. Dermed må du starte det med bruken av "system" -biblioteket som er spesifisert av søkeordet "bruker" i koden. Siden vi må jobbe med tråder, må vi spesifisere trådområdet til systembiblioteket via "Bruke" nøkkelordet.

Begge bibliotekene er nødvendige for implementering av lås og tråder i våre eksempler i denne artikkelen. Etter dette har vi initialisert en enkel "test" -klasse i C# -koden. Du kan også definere et navneområde før klassen, men det er ikke nødvendig her. Klassen "test" inneholder totalt 2 funksjoner. Den ene er en brukerdefinert funksjon som heter “Show ()”, og den andre er hovedfunksjonen () til C# som også er en Executor-funksjon i C# -koder. Utførelsesprosessen starter fra Main () -metoden i dette programmet. Vi har brukt "tråd" -klassen til "tråden" navneområdet for å lage to nye trådobjekter T1 og T1 ved hjelp av et "nytt" nøkkelord.

Innenfor trådopprettelsen har vi brukt "show" -funksjonen i argumentene til "tråd" for å gjøre det til en trådfunksjon. Som vi har laget 2 tråder, betyr det at showet () funksjonen vil bli brukt 2 ganger i koden som henholdsvis tråd 1 og tråd 2. Dette er bare en trådoppretting og ikke utførelsen. For å utføre tråden, må vi bruke "start" -funksjonen fra tråden. Så objektet “T1” av tråd 1 har blitt brukt til å kalle “Start” -funksjonen for å utføre trådfunksjonen “Vis”. Etter den første tråden vil den andre tråden T2 utføre "show" -metoden ved å bruke samme startfunksjon. Nå, når en tråd er startet, vil showet () funksjonen bli utført ved å bruke sin “for” -sløyfe for opptil 5 iterasjoner. Inntil sløyfen er utført, vil den fortsette å utføre sin "konsoll.WritLine () ”-funksjonserklæring for å vise iterasjonsnummeret ved å bruke iterasjonsvariabelen“ I ”. Etter hver iterasjon vil tråden få en søvn på 3 sekunder ved å bruke "søvn" -funksjonen til C# her. Det samme vil bli gjentatt når en annen tråd kommer i gang. Nå som vi har brukt tråder for å utføre "show" -funksjonen, er det ikke sikkert at den vil utføre den på en måte der . Tråd 1 først og deretter tråd 2. La oss lagre koden vår for å se resultatet.

Vi trenger C# kompilator- og runtime -miljøkommandoer for å kompilere og utføre kodene våre. Vi har allerede installert begge deler. Dermed har vi brukt C# “MCS” -kommandoen som ble brukt som C# -kompilatoren for å kompilere denne nyopplagte koden. Samlingen returnerer ingenting, men genererer en ny "exe" -fil i samme gjeldende mappe i.e. vellykket.

Så vi har utført denne "EXE" -filen for C# -koden med C# 's "Mono" Runtime Command. Da begge trådene ble startet i hovedfunksjonen (), så fortsetter de å utføre showet () funksjonen etter hverandre på hver iterasjon. Dette betyr at den ene tråden tok ressursene fra den andre tråden mens den første ikke engang fullførte utførelsen fullt ut. Dette kan også forårsake dødvakt.

Eksempel # 02: med låsekonstruksjon

For å forhindre at trådene utføres samtidig mens ressursene blir delt eller bedt om, må vi bruke "lås" -konstruksjonen i C# -koden. Låsekonstruksjonen vil forsikre, ikke la noen annen tråd få ressurser som for øyeblikket brukes av den for øyeblikket løpende prosessen til den fullfører utførelsen. Dette kan fungere med prioriteringsregelen eller . førstemann til mølla. For å bruke "lås" -konstruksjonen, må vi lage et objekt for lås ved hjelp av "objekt" -klassen til C#.

Dette objektet må være av statisk skrivebeskyttet type. Du kan nevne det alt du ønsker. Opprettelsen av et låsobjekt forsikrer at en lås opprettes og ikke brukes på noen deler av koden. Vi har kalt det “Stopp”. Nå må vi opprette en konstruksjon med sitt søkeord "lås" og spesifisere låsenavnet i argumentene som "stopp" i "show" -funksjonen. Siden show () -funksjonen er vår tråd, må vi legge implementeringen innen "lås" -konstruksjonen (i.e. kodestykket vi ønsker å begrense tilgangen til.) Nå er koden vår klar ettersom låsen har blitt brukt på kodestykket i trådfunksjonen. Lagre denne oppdaterte koden og utfør den for å se resultatet.

Vi har samlet denne oppdaterte koden på vår Ubuntu -terminal og utført sin "exe" -fil etter det. Denne gangen er hele "show" -funksjonen blitt utført fullt ut (i.e. “For” -sløyfe er fullført.) Dette er fordi begge ganger når en tråd startes med "start" -funksjonen, låste "stopp" -konstruksjonen til showet () til den første tråden fullførte utførelsen. Etter det skjedde dette også med tråd 2. Derfor er utgangen vår glatt.

Outhodningsutgangen vises uten pause og om et sekund på skjermen. Dette vil ikke la deg se hvordan en iterasjoner fungerer etter hverandre når det ikke er noen forsinkelse i utførelsen mens du bruker en lås. La oss oppdatere "show" -funksjonen i samme kode og legge til søvnfunksjonen i den som tar 2 sekunders søvn etter utførelsen av konsollen.WritLine () funksjonserklæring mens. Lagre denne koden med Ctrl+S, lukk filen og åpne skallet.

Etter å ha samlet kodefilen, har vi utført "EXE" -filen på skallet. Koden begynner å utføre trådene sine. Den første tråden "show" startet mens du sov i 2 sekunder etter hver iterasjon som vist nedenfor.

Etter at den første tråden “Show” har fullført utførelsen, ga låsen ut tilgangen til showfunksjonen og tråd 2 er anskaffet den for utførelse.

Konklusjon:

Denne artikkelen inneholder detaljer om låsekonstruksjonen i C#. Vi har diskutert vårt første eksempel uten å bruke "lås" -konstruksjonen og fått en utgang med den tilfeldige og uordnede utførelsen av en trådfunksjon. Vi har diskutert årsakene til denne uordnede utførelsen av tråden også. Etter det diskuterte vi et eksempel med bruk av "lås" -konstruksjonen og fikk en utgang med en tilfeldig måte å utføre tråd.