C Programmering

Posix Mutex med C-programmering

Posix Mutex med C-programmering
Dagens artikkel vil fokusere på bruken av Posix Mutex med C-programmering i Linux Mint 20. Før vi går videre til hovedeksemplet vårt, vil vi først fjerne noen få terminologier, slik at du enkelt kan forstå eksempelscenariet som vi vil dele med deg. I operativsystemer brukes begrepet threading mye. Tråder er i utgangspunktet delprosesser som delegeres med forskjellige oppgaver. Du kan vurdere følgende eksempel for å forstå hvordan tråder fungerer.

Anta at det er en hovedtråd A, hvis jobb er å beregne summen av variablene w og y der w = x + 1, og y = z + 2. Verdiene til variablene x og z skal hentes av brukeren. I dette scenariet kan vi lage to tråder, B og C. Jobben til tråd B vil være å ta verdien av variabelen x fra brukeren, øke den med 1 og lagre den i variabelen w. Jobben til tråd C vil være å ta verdien av variabelen z fra brukeren, øke den med 2 og deretter lagre den i variabel y. Til slutt vil begge disse trådene overføre disse resultatene til hovedtråden A, som deretter vil beregne summen og vise det endelige resultatet.

Hvis vi ikke hadde laget noen tråder i dette scenariet, ville alle oppgavene blitt utført av hovedtråden A på mye større tid. På denne måten kan tråder effektivt utføre beregningene dine uten unødvendige forsinkelser. Imidlertid er det en veldig stor bekymring for bruken av tråder, som er kjent som "race condition". Det er en situasjon der to tråder prøver å få tilgang til og endre de samme dataene, og dermed la dem være inkonsekvente. Som programmerer bør vårt mål være å unngå løpsforhold på den mest elegante måten.

Den mest brukte løsningen for å unngå løpsforhold er bruken av Mutex. Mutex står for gjensidig ekskludering, og det gir oss i utgangspunktet en låsemekanisme som forhindrer tilgang og endring av kritiske data av mer enn én bruker om gangen. På denne måten sikres datakonsistens. Posix er i utgangspunktet et bibliotek som presenterer oss med forskjellige innebygde funksjoner som gjør implementeringen av tråder og Mutex mye enklere. Med følgende eksempel vil vi prøve å lære bruken av Posix Mutex med C-programmering i Linux Mint 20.

Eksempel på bruk av Posix Mutex med C-programmering i Linux Mint 20

Vi vil utføre de følgende tre trinnene for å gå gjennom bruken av Posix Mutex med C-programmering i Linux Mint 20.

Trinn 1: Opprette et program som demonstrerer bruken av Posix Mutex med C-programmering i Linux Mint 20

Først av alt vil vi lage en .cpp-fil på Linux Mint 20-systemet. Vi vil ganske enkelt gå til Hjem-mappen, lage et tomt dokument og gi det navnet Mutex.cpp. En gang vår .cpp-fil er opprettet, åpner vi den med teksteditoren. Etter det skriver vi koden som vises i bildene nedenfor til vår .cpp-fil:

Koden vist i de to bildene ovenfor skapte to forskjellige tråder. Den første tråden tilsvarer jobb nr. 1, mens den andre tråden tilsvarer jobb nr. 2. Så har vi opprettet en prøvefunksjon kalt “Mutex Function”. I denne funksjonen låser vi først Mutex-låsevariabelen, og den blir bare låst opp når tråd nr. 1 er ferdig med jobb nr. 1. På samme måte vil Mutex-låsevariabelen igjen bli låst av tråd nr. 2 til den er ferdig med jobb nr. 2. Denne "Mutex-funksjonen" kalles "hoved" -funksjonen.

Trinn 2: Kompilering av C-programmet i Linux Mint 20

Etter å ha lagret .cpp-fil, vil vi nå kompilere den gjennom Linux Mint 20-terminalen med følgende kommando:

$ gcc -o Mutex Mutex.cpp-tråd

Her refererer “Mutex”, etter “-o” -flagget, til navnet på objektfilen som skal opprettes, mens “Mutex.cpp ”er navnet på originalen .cpp-fil. Flagget “-pthread” er nødvendig for å kompilere dette programmet fordi dette programmet er skrevet mens du bruker biblioteket “pthread”. Hvis du utelater dette flagget, blir ikke programmet kompilert og vil gi noen feil. Den vellykkede samlingen av vår .cpp-fil vil ikke produsere noen meldinger på terminalen, som vist på bildet nedenfor:

Trinn 3: Kjører C-programmet i Linux Mint 20

Når objektfilen "Mutex" er opprettet, kan vi kjøre den ved hjelp av følgende kommando:

$ ./ Mutex

I utdataene fra Mutex.cpp-program, vil du merke at første jobb 1 har startet, noe som betyr at tråd nr. 1 har anskaffet Mutex-låsen. Etter det er Job 1 ferdig etter en stund. Deretter starter Job 2, noe som betyr at tråd nr. 2 har anskaffet Mutex-låsen. Den blir først låst opp når Job 2 er ferdig.

Konklusjon

Denne artikkelen ga en grundig forklaring på bruken av Posix Mutex med C-programmering i Linux Mint 20. Mutex kan brukes veldig effektivt for å unngå løpsforholdene mens du programmerer ved å bare inkludere Posix eller pthread-biblioteket i C-koden vår. Dette vil ikke bare sikre datakonsistens, men vil også gjøre behandlingen mye mer effektiv.

Det beste med å bruke Posix-biblioteket i Linux er at vi ikke engang trenger å installere spesialisert programvare, pakker eller kompilator for det. C-koden kan ganske enkelt skrives i hvilken som helst standard teksteditor på Linux og kan kompileres og kjøres med standard gcc eller g ++ kompilatorer. Dette viser seg å være et ekstra lag av brukervennlighet og brukervennlighet av Posix Mutex med C-programmering i Linux Mint 20.

Nyttige verktøy for Linux-spillere
Hvis du liker å spille spill på Linux, er sjansen stor for at du har brukt apper og verktøy som Wine, Lutris og OBS Studio for å forbedre spilloppleve...
HD Remastered Games for Linux som aldri hadde en Linux-utgave tidligere
Mange spillutviklere og utgivere kommer med HD-remaster av gamle spill for å forlenge franchisetiden, vennligst fans som ber om kompatibilitet med mod...
Hvordan bruke AutoKey til å automatisere Linux-spill
AutoKey er et desktopautomatiseringsverktøy for Linux og X11, programmert i Python 3, GTK og Qt. Ved å bruke skript og MACRO-funksjonalitet kan du aut...