C Programmēšana

POSIX semaforas ar C programmēšanu

POSIX semaforas ar C programmēšanu

POSIX attiecas uz OS pārnēsājamo saskarni, kas ir IEEE standarts, kas izstrādāts, lai veicinātu dažādu lietojumprogrammu pārnesamību. POSIX ir centieni izveidot kopēju standartizētu UNIX versiju, sadarbojoties ar pārdevējiem. Tas atvieglotu lietotņu pārnešanu starp aparatūras platformām, ja tās ir efektīvas. Hewlett-Packard integrē POSIX savā licencētajā MPE / iX OS 5. versijā.0 un HP / UXX 10. versija.Attiecīgi 0 (tā UNIX).

POSIX standartā ir daudz vairāk nekā desmit daļas, tomēr divas ir viegli iegūstamas. POSIX.1 apraksta C programmēšanas saskarnes (t.i.e., sistēmas zvanu bibliotēka) failiem, procedūrām un I / O termināliem. C POSIX pakotņu bibliotēka POSIX platformām ir C standarta bibliotēkas ietvars. Tas tiek izveidots vienlaikus ar standarta ANSI C. Lai POSIX būtu saderīgs ar C standartu, ir veikti vairāki mēģinājumi. POSIX nodrošina papildu funkcijas tām, kas ieviestas standartā C.

POSIX semafori

Semafora ir datu struktūra, ko bieži izmanto, lai sinhronizētu procesus un palīdzētu pavedieniem bez to mijiedarbības savā starpā, lai darbotos kopā. Semaforu saskarni nosaka POSIX standarts. Tā nav daļa no Pthreads. Tomēr lielākā daļa UNIX, kas atbalsta Pthreads, pat nodrošina semaforas. Unix veida sistēmās, piemēram, Linux, semafori tiek apvienoti ar ziņojumu rindām un kopējo atmiņu zem starpprocesu komunikācijas (IPC) pakalpojumiem. Vecākas ietvara V semaforas un mūsdienu POSIX semaforas kļūst par divu veidu semaforām. POSIX semafora izsaukšana ir daudz vienkāršāka nekā Sistēmas V semafora izsaukšana. Lai gan, Sistēmas V semaforas ir vieglāk iegūstamas, it īpaši iepriekšējās Unix līdzīgās platformās. Ir jāpievieno programmas, izmantojot POSIX semaforas, Pthread bibliotēkai. Šajā rakstā mēs apskatīsim POSIX semaforas.

Kāpēc POSIX semaforas?

Ap pavedieniem ir liela problēma, kas ir “sacensību stāvoklis”. Tas ir apstāklis, kurā divi pavedieni cenšas iegūt un mainīt vienu un to pašu informāciju, tādējādi padarot to pretrunīgu. Lai izvairītos no sacensību apstākļiem, mēs ļoti ilgu laiku izmantojam semaforas.

Semaforas ir pieejamas divos veidos:

Binārā semafora:

Tas tiek atzīts arī par muteksu slēdzeni. Tam būtu tikai divas iespējamās vērtības: 0 un 1. Vērtība tiks inicializēta kā 1. To izmanto, lai ieviestu daudzus procesus, lai atrisinātu nopietno sadaļu problēmu.

Semafora skaitīšana:

Tā lielums var atšķirties neierobežotā domēnā. Tas tiek izmantots, lai tam būtu autoritāte attiecībā uz piekļuvi daudziem instances resursiem.

Linux POSIX ietvaram ir integrēta Semaforu krātuve. Lai to izmantotu, mums:

Gandrīz visas POSIX semaforu metodes un formas ir prototipētas vai norādītas sadaļā “Semafors.h '. Mēs izmantosim semaforu, lai aprakstītu entītiju vai objektu kā:

>> sem_t sem_name;

Šeit ir dažādas funkcijas, kuras mēs izmantotu POSIX semaforā.

Sem_init

Lai inicializētu semaforu, jums jāizmanto sem_init metode. Šajā funkcijā sem atbilst inicializētam semafora objektam. Pshared ir reklāmkarogs vai karodziņš, kas norāda, vai semaforu var kopīgot ar dakšu () procedūru vai nē. LinuxThreads pašlaik neizmanto koplietotās semaforas. Argumenta vērtība ir sākuma vērtība, pie kuras tiek piestiprināta semafora.

>> int sem_init (sem_t * sem, int pshared, neparakstīta int vērtība);

Sem_gaida

Mēs izmantosim sem-wait metodi, lai turētu / bloķētu semaforu vai liktu tai gaidīt. Ja semafora vērtība ir negatīva, zvana cikls tiks automātiski bloķēts. Ikreiz, kad kāds cits pavediens izsauc sem_post, pamostas viens no jau aizsērējušajiem procesiem.

>> int sem_wait (sem_t * sem);

Sem_post

Mēs izmantosim sem_post metodi, lai palielinātu semafora vērtību. Zvanot, sem_post palielinās vērtību, un viens no jau aizsērējušajiem vai gaidošajiem procesiem pamostas.

>> int sem_post (sem_t * sem);

Sem_getvalue

Ja vēlaties uzzināt par semafora vērtību, jums jāizmanto zemāk redzamā funkcija sem_getvalue. Tas iegūs semafora pašreizējo vērtību un tiks novietots galapunktā.

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

Sem_destroy

Jums vajadzētu izmantot metodi sem_destroy, ja vēlaties iznīcināt semaforu. Ja turpināsies semaforas bojāeja, semaforā neviens pavediens negaidīs.

>> Int sem_destroy (sem_t * sem);

Instalējiet GCC utilītu

Lai apkopotu POSIX Semaphore C kodu, Linux sistēmā ir jābūt instalētai gcc utilītai. Šim nolūkam atveriet komandu termināli un izmēģiniet šo komandu.

$ sudo apt-get install gcc

Apstipriniet savu darbību, sitot .

POSIX semafora ieviešana ar C programmēšanu Ubuntu

Pašā sākumā jums ir jāizveido jauns fails ar .cpp paplašinājums Ubuntu 20.04 sistēma. Lai to izdarītu, jums ir jādodas uz savu mājas direktoriju un jāizveido jauns tukšs fails ar nosaukumu jauns.cpp. To var izveidot arī, izmantojot komandu komandu touch komandā.

Var redzēt, ka jaunais.cpp fails ir izveidots mājas direktorijā.


Pēc .cpp failu, atveriet to kā teksta redaktoru savā Linux sistēmā un ierakstiet zemāk esošo kodu šajā failā, kāds tas ir. Pēc tam saglabājiet un aizveriet.

Izpildiet POSIX Semaphore C programmu operētājsistēmā Ubuntu 20.04

Atveriet savu termināli operētājsistēmā Ubuntu 20.04 un izpildiet zemāk esošo komandu gcc, kam seko faila nosaukums.

$ gcc faila nosaukums.c -lpthread -lrt

Ir izveidoti 2 pavedieni, viens tiek izveidots pēc 2 sekundēm no otra. Pēc skrūves saņemšanas pats pirmais pavediens guļ 4 sekundes. Tātad, pēc tā izsaukšanas otrais pavediens nepievienosies tieši, un tas parādīsies 4-2 = 2 sekundes pēc tā izsaukšanas. Šeit ir izeja:

Ja mēs nebūtu izmantojuši semaforu, atbilstoši konteksta maiņai, rezultāts varētu būt tāds, kāds novērots:

Secinājums

Šajā rokasgrāmatā ir sniegts detalizēts pārskats par POSIXSemaphore ar C programmēšanu lietošanu Ubuntu 20. Izmantojot tikai POSIX vai Pthread bibliotēku visā noteiktā C kodā, POSIX semaforu var viegli izmantot, lai novērstu sacensību apstākļus kodēšanas laikā.

Instalējiet jaunāko Dolphin emulatoru Gamecube un Wii operētājsistēmai Linux
Delfīnu emulators ļauj jums spēlēt izvēlētās Gamecube un Wii spēles Linux personālajos datoros (PC). Tā kā Dolphin Emulator ir brīvi pieejams un atvē...
Kā lietot GameConqueror Cheat Engine Linux
Rakstā ir sniegts ceļvedis par GameConqueror apkrāptu dzinēja izmantošanu Linux. Daudzi lietotāji, kas spēlē spēles operētājsistēmā Windows, bieži izm...
Labākie Linux spēļu konsoles emulatori
Šajā rakstā tiks uzskaitīta populārā Linux spēļu konsoles atdarināšanas programmatūra. Emulācija ir programmatūras saderības slānis, kas atdarina spēļ...