C# mutex

C# mutex
I C# -programmering kan vi bruke mutex -klassen til å synkronisere mellom to tråder. Det fungerer som en lås. Det stopper to tråder fra å utføre en eller flere handlinger samtidig. Mutex fungerer på tvers av mange prosesser. Det gir Wainone () og også ReleaseMutex () -metoder. Waitone () -metoden brukes til å låse ressursen, og ReleaseMutex () -metoden er her for å låse opp ressursen. Det er nyttig når vi jobber med et multi-ramme-prosjekt eller et prosjekt der vi har flere oppgaver opprettet. Vi bør bruke dette når vi prøver å låse andre oppgaver eller tråder som ikke kan bruke ressursen mens den andre oppgaven eller tråden bruker den ressursen.

Her, i denne guiden, vil vi forklare deg hvordan vi bruker mutex -klassen i C# -programmering. Vi gir forskjellige eksempler på å bruke denne mutex () -klassen i vårt C# -program. Vi utfører de gitte eksemplene i Ubuntu 20.04.

Eksempel 1

Vi vil utføre et eksempel ved hjelp av denne mutex () -klassen. Når vi bruker Ubuntu 20.04 For å utføre disse eksemplene, må vi åpne tekstredigereren til denne Ubuntu 20.04 og opprett deretter en fil med et hvilket som helst navn som vårt valg og lagre denne filen med filtypen av ".CS ”. Skriv deretter følgende kode i denne filen. Vi forklarer også hver linje i dette gitte programmet i detalj nedenfor.

Den første linjen i denne C# -koden er “Bruke system”, et bibliotek, og ved å bruke dette biblioteket kan vi få forskjellige klasser og funksjoner til vår C# -kode. Vi får "konsoll" -klassen og "WritLine" -funksjonen ved å bruke dette biblioteket. Nøkkelordet “Bruker” brukes til å motta parametere. Systemet. Gjenging ”er her for å generere oppgaver og motta gjenstander fra klassen. Nå vil vi importere navneområdet med navnet "Demomutex". Vi opprettet også en klasse som heter "program". Vi oppretter en forekomst kalt “mutex” som er lik “new mutex ()”. Det "nye" er et nøkkelord for å lage et nytt forekomst.

Ring deretter "hoved" -funksjonen i vår C# -kode. I denne "hoved" -funksjonen har vi en "for" -sløyfe som brukes til å lage fem forskjellige tråder. Siden denne sløyfen initialiserer “A” med “1”, er tilstanden her “A<=5” which means there are 5 iterations in the loop or the loop iterates 5 times and creacreatestiple threads. Each time the value of “a” increments when the loop executes and the condition is true. Then we create a Thread object with the name “threadObj” by using the “new” keyword. When this loop executes, it creates an object of the Thread. Now, we give the “name” to the “threadobj” which is equal to the value of “a”. It will store the name as “Thread” + a means the “Thread” and the value of “a” that “a” depends on the value of the loop iteration.

Så har vi “threadobj.Start () "der" start () "brukes til å endre tilstanden til" threadobj "til løpstilstanden. Utenfor denne "for" -sløyfen har vi "konsoll.Readkey () ”. Dette vil bruke til å vente på et nøkkelpress. Vi har en metode under dette med navnet "Demomutex" som er "statisk". Vi bruker denne metoden for å implementere synkronisering ved bruk av “mutex”. “Konsollen.WritLine ”er her for å skrive ut uttalelsen skrevet inni den. Etter denne “konsollen.WritLine "-uttalelse, vi bruker" Try "-metoden.

Så igjen, vi har “konsollen.WritLine ”uttalelse. Når du ser utdataene, vil det være klart for deg hvordan denne “konsollen.WritLine ”skriver ut den gitte uttalelsen. “Tråden.Sleep (2000) ”er for å suspendere eller pause den nåværende trådens utførelse i en tid som er gitt som en parameter her. Etter dette bruker vi igjen "konsollen.WritLine ”uttalelse. Vi bruker nøkkelordet "nøkkelord" for å rengjøre ressursene som vi tildeler i prøveblokken eller uttalelsen i denne "endelig" -blokken som er utført når Try -setningen forlater kontrollen. Inne.

Vi gir også utdataene fra denne koden på bildet nedenfor. Du kan se hvordan denne koden gir utdataene på skjermen. Vi kompilerer koden vår med denne kommandoen, og når koden er feilfri, vil den opprette en EXE-fil for oss. Denne "exe" -filen blir deretter utført ved å bruke “Mono” -kommandoen. Og husk at når vi bruker denne “mono” -kommandoen, må vi bruke “.exe ”filutvidelse med filnavnet og kjør deretter denne kommandoen for å få utdataene.

I denne utgangen kan du se at når den ene tråden ønsker å legge inn den kritiske delen, vil de andre trådene også komme inn, men de må vente til den første tråden fullfører utførelsen fordi vi bruker mutex “Waitone ()” -funksjonen. Når denne tråden fullfører utførelsen, kommer den neste tråden inn og starter utførelsen og eksisterer etter å ha fullført oppgaven. Det gjør at neste tråd kan komme inn og starte utførelse. De samme trinnene gjentas til tilstanden er sann.

Eksempel nr. 2

Her har vi en annen illustrasjon ved hjelp av mutex () -metoden. La oss prøve dette eksemplet for å forstå dette konseptet.

De samme utsagnene som brukes i denne C# -koden er "Bruke system" og "System.Tråd ”. Klassen er "mutexprogram" og i klassen har vi laget en forekomst av mutex -klassen med navnet "mutex" ved å bruke det "nye" nøkkelordet og deretter kalle "hoved" -funksjonen under dette. Waitone () -metoden prøver å få en lås. Hvis mutex ikke er tilgjengelig, blokkerer "Waitone ()" blokkerer og venter til den er tilgjengelig. Vi spesifiserer også en tidsbegrensning her. Hvis vi kaller WaitOne () -metoden på “mutex -objektet” og tidsbegrensningen passerer uten å kunne skaffe mutex, så returnerer Waitone False. Når den kommer tilbake, vil uttalelsen skrevet nedenfor bli utført: “Konsollen.WritLine ”uttalelse. Og denne uttalelsen brukes til utskrift.

Hvis vi blir sann, går vi til kodeseksjonen som er utført, som er "Run ()" -funksjonen, og denne funksjonen er definert nedenfor. Når “Run ()” slutter, utfører “Endelig” blokken, som frigjør mutex ved å bruke “mutexrelease”. Vi forklarer denne "mutexrelease" i forrige kode. Vi definerer “Run ()” -funksjonen her vi skal skrive ut en uttalelse ved hjelp av “Console.WritLine () ”og til slutt har vi“ konsollen.Readline () ”. Denne “konsollen.Readline ”er her for lesing av komplette strenger til Enter -tasten er trykket på.

Utgangen viser bare "Run ()" -uttalelsene fordi den returnerer sann og beveger seg til "Run ()". Hvis vi utfører dette på den andre terminalen samtidig, vil den på den andre terminalen vise uttalelsen som er skrevet i IF -uttalelsen da den prøver å få "mutex", men "mutex" er allerede i bruk av en annen applikasjon , så det må vente på at "mutex" skal slippes.

Konklusjon

Denne opplæringen utforsker “mutex” i C# -programmering. Vi demonstrerer to eksempler her og bruker denne "mutex" slik at du vil forstå dette konseptet. Denne "mutex" -klassen vil gi oss "Waitone ()" og "RealEasemutex ()" -funksjoner. Denne "Waitone ()" brukes til låsing, og "releaseMutex ()" brukes til å låse opp oppgaven eller tråden. Vi bruker begge metodene i eksemplene våre og forklarer alle disse i detalj. Jeg håper du vil lære dette "mutex" -konseptet etter en grundig studie av denne guiden og også kunne bruke denne "mutex" -klassen i prosjektet ditt.