C Programmering

POSIX semaforer med C-programmering

POSIX semaforer med C-programmering

POSIX hänvisar till det bärbara gränssnittet för operativsystemet, som är en IEEE-standard, utvecklad för att underlätta bärbarhet för olika applikationer. POSIX är ett försök att bygga en gemensam standardiserad version av UNIX genom ett samarbete mellan leverantörer. Det skulle göra portning av appar bland hårdvaruplattformar enklare om de är effektiva. Hewlett-Packard integrerar POSIX i sin licensierade MPE / iX OS version 5.0 och HP / UXX version 10.0, respektive (dess UNIX).

POSIX-standarden har mycket mer än tio delar, men två är lätt att få. POSIX.1 beskriver C-programmeringsgränssnitt (i.e., ett systemanropsbibliotek) för filer, procedurer och I / O-terminaler. C POSIX-paketbiblioteket för POSIX-plattformar är ett ramverk för C-standardbiblioteket. Detta fastställs samtidigt som standard ANSI C. För att göra POSIX kompatibel med standard C har flera försök gjorts. POSIX ger ytterligare funktioner till de som implementeras i standard C.

POSIX Semaforer

En semafor är en datastruktur som ofta används för att synkronisera processerna och hjälpa trådar utan att de interagerar med varandra för att fungera tillsammans. Gränssnittet för semaforer specificeras av POSIX-standarden. Det är inte en del av Pthreads. De flesta UNIX-enheter som stöder Pthreads ger till och med semaforer. I Unix-liknande ramar, som Linux, slås semaforer samman med meddelandeköer och gemensamt minne under Interccess-tjänsterna (IPC). De äldre ramarna V-semaforer och de moderna POSIX-semaforerna blir två typer av semaforer. POSIX Semaphore-samtal är så mycket enklare än System V Semaphore-samtal. System V-semaforer är dock lättare att få, särskilt på tidigare Unix-liknande plattformar. Det finns ett behov av att ansluta program med POSIX-semaforer till Pthread-biblioteket. Vi tar en titt på POSIX-semaforerna i den här artikeln.

Varför POSIX Semaphores?

Det finns en stor fråga kring trådar, vilket är "rasvillkor". Det är en omständighet där två trådar försöker få och ändra samma information, vilket gör den motstridig. För att undvika tävlingsförhållanden har vi använt semaforer under mycket lång tid.

Semaforer finns i två typer:

Binär semafor:

Det känns också igen som ett mutexlås. Det skulle bara ha två möjliga värden, 0 och 1. Värdet initialiseras som 1. Det används för att genomföra många processer för att lösa den allvarliga sektionsfrågan.

Räknar Semaphore:

Dess storlek kan variera över en obegränsad domän. Det används för att ha behörighet över tillgång till resurser med många instanser.

Linux POSIX-ramverket har sitt integrerade Semaphore-arkiv. För att kunna använda det måste vi:

Nästan alla POSIX Semaphore-metoder och former är prototyperade eller specificerade i 'Semaphore.h '. Vi kommer att använda Semaphore för att beskriva en enhet eller ett objekt som:

>> sem_t sem_name;

Här är olika funktioner som vi skulle använda i POSIX Semaphore.

Sem_init

För att initialisera en semafor måste du använda metoden sem_init. I den här funktionen motsvarar sem ett initialiserat semaforobjekt. Pshared är en banner eller flagga som anger om semaforen kan delas med en gaffelprocedur () eller inte. Delade semaforer stöds för närvarande inte av LinuxThreads. Argumentvärdet är det startvärde som semaforen är fixerad till.

>> int sem_init (sem_t * sem, int pshared, osignerat int-värde);

Sem_wait

Vi kommer att använda sem-väntemetoden för att hålla / låsa en semafor eller få den att vänta. Om semaforen har försetts med ett negativt värde blockeras samtalscykeln automatiskt. Närhelst någon annan tråd kallar sem_post vaknar en av de redan igensatta processerna.

>> int sem_wait (sem_t * sem);

Sem_post

Vi kommer att använda metoden sem_post för att öka värdet på en semafor. Vid anrop ökar sem_post värdet och en av de redan igensatta eller väntande processerna vaknar.

>> int sem_post (sem_t * sem);

Sem_getvalue

Om du vill veta om värdet på en semafor måste du använda sem_getvalue-funktionen nedan. Det kommer att erhålla nuvärdet av semaforen och placeras i den valp-spetsiga destinationen.

>> Int sem_getvalue (sem_t * sem, int * valp);

Sem_destroy

Du bör använda sem_destroy-metoden om du vill förstöra semaforen. Om semaforens bortgång ska fortsätta, väntar ingen tråd i semaforen.

>> Int sem_destroy (sem_t * sem);

Installera GCC-verktyget

För att kompilera POSIX Semaphore C-koden måste du ha gcc-verktyget installerat i ditt Linux-system. För detta ändamål, öppna din kommandoterminal och prova kommandot nedan.

$ sudo apt-get install gcc

Bekräfta din handling genom att slå Y.

Implementering av POSIX Semaphore med C-programmering i Ubuntu

I början måste du skapa en ny fil med en .cpp-tillägg på Ubuntu 20.04-systemet. För detta måste du navigera mot din hemkatalog och skapa en ny tom fil med namnet ny.cpp. Du kan också skapa det med kommandot touch i kommandoterminalen.

Du kan se att den nya.cpp-fil har skapats i hemkatalogen.


Efter skapandet av .cpp-fil, öppna den som en textredigerare i ditt Linux-system och skriv nedanstående kod i den här filen som den är. Efter det, spara och stäng den.

Kör POSIX Semaphore C-programmet i Ubuntu 20.04

Öppna din terminal i Ubuntu 20.04 och kör gcc-kommandot nedan följt av filnamnet.

$ gcc filnamn.c -lpthread -lrt

Det finns två trådar bildade, en bildas efter två sekunder av den andra. Efter att ha fått bulten sover den allra första tråden i 4 sekunder. Så efter att den har anropats skulle den andra tråden inte gå med direkt, och detta visas 4-2 = 2 sekunder efter att det har anropats. Här är resultatet:

Om vi ​​inte hade använt semafor, enligt kontextbyte, kan resultatet ha varit som observerat:

Slutsats

I den här guiden har en detaljerad översikt över användningen av POSIXSemaphore med C-programmering i Ubuntu 20 ges. Genom att bara använda POSIX- eller Pthread-biblioteket genom en viss C-kod kan POSIX Semaphore lätt användas för att förhindra rasförhållanden under kodning.

Mus Hur man använder Xdotool för att stimulera musklick och tangenttryckningar i Linux
Hur man använder Xdotool för att stimulera musklick och tangenttryckningar i Linux
Xdotool är ett ledigt verktyg för öppen källkod för simulering av musklick och tangenttryckningar. Den här artikeln kommer att täcka en kort guide om ...
Mus Topp 5 Ergonomiska datormusprodukter för Linux
Topp 5 Ergonomiska datormusprodukter för Linux
Ger långvarig datoranvändning smärta i handleden eller fingrarna? Lider du av styva leder och måste ständigt skaka hand? Känner du en brännande smärta...
Mus Så här ändrar du inställningar för mus och pekplatta med Xinput i Linux
Så här ändrar du inställningar för mus och pekplatta med Xinput i Linux
De flesta Linux-distributioner levereras med "libinput" -bibliotek som standard för att hantera inmatningshändelser i ett system. Den kan bearbeta inm...