Programare C

Posix Mutex cu programare C

Posix Mutex cu programare C
Articolul de astăzi se va concentra pe utilizarea Posix Mutex cu programare C în Linux Mint 20. Cu toate acestea, înainte de a trece la exemplul nostru principal, am dori mai întâi să clarificăm câteva terminologii, astfel încât să puteți înțelege cu ușurință exemplul de scenariu pe care îl vom împărtăși. În sistemele de operare, conceptul de filetare este utilizat pe scară largă. Firele sunt în esență subprocese care sunt delegate cu sarcini diferite. Puteți lua în considerare următorul exemplu pentru a înțelege funcționarea firelor.

Să presupunem că există un fir principal A, a cărui sarcină este să calculeze suma variabilelor w și y unde w = x + 1 și y = z + 2. Valorile variabilelor x și z trebuie preluate de către utilizator. În acest scenariu, putem crea două fire, B și C. Sarcina firului B va fi de a lua valoarea variabilei x de la utilizator, a o crește cu 1 și a o salva în variabila w. Sarcina firului C va fi aceea de a lua valoarea variabilei z de la utilizator, de a o crește cu 2, apoi de a o salva în variabila y. În cele din urmă, ambele fire vor transmite aceste rezultate la firul principal A, care va calcula suma și va afișa rezultatul final.

Dacă nu am fi creat niciun fir în acest scenariu, atunci toate sarcinile ar fi fost efectuate de firul principal A într-un timp mult mai mare. În acest fel, thread-urile vă pot efectua calculele în mod eficient fără întârzieri inutile. Cu toate acestea, există o îngrijorare foarte mare cu privire la utilizarea firelor, care este cunoscută sub numele de „condiție de rasă”. Este o situație în care două fire încearcă să acceseze și să modifice aceleași date, lăsându-le astfel inconsistente. În calitate de programator, obiectivul nostru ar trebui să fie să evităm condițiile cursei în cel mai grațios mod.

Soluția cea mai frecvent utilizată pentru evitarea condițiilor de cursă este utilizarea Mutex. Mutex reprezintă excluderea reciprocă și ne oferă practic un mecanism de blocare care împiedică accesul și modificarea datelor critice de către mai mulți utilizatori la un moment dat. În acest fel, se asigură coerența datelor. Posix este practic o bibliotecă care ne prezintă diferite funcții încorporate care facilitează mult mai ușor implementarea thread-urilor și a Mutex. Cu următorul exemplu, vom încerca să învățăm utilizarea programului Posix Mutex cu programare C în Linux Mint 20.

Exemplu de utilizare a Posix Mutex cu programare C în Linux Mint 20

Vom efectua următorii trei pași pentru a vă ghida prin utilizarea programului Posix Mutex cu programare C în Linux Mint 20.

Pasul 1: Crearea unui program care demonstrează utilizarea Posix Mutex cu programarea C în Linux Mint 20

În primul rând, vom crea un .cpp pe sistemul nostru Linux Mint 20. Vom merge pur și simplu în dosarul Acasă, vom crea un document gol și îl vom denumi Mutex.cpp. Odată ce a noastră .este creat fișierul cpp, îl vom deschide cu editorul de text. După aceea, vom tasta codul afișat în imaginile de mai jos pe al nostru .fișier CPP:

Codul afișat în cele două imagini de mai sus a creat două fire diferite. Primul fir corespunde Jobului # 1, în timp ce al doilea thread corespunde Jobului # 2. Apoi am creat o mostră de funcție numită „Funcția Mutex”. În această funcție, blocăm mai întâi variabila de blocare Mutex și va fi deblocată numai după ce firul # 1 termină Jobul 1. În mod similar, variabila de blocare Mutex va fi din nou blocată de firul # 2 până când va termina Jobul 2. Această „Funcție Mutex” este numită de funcția „principală”.

Pasul 2: Compilarea programului C în Linux Mint 20

După salvarea .cpp, acum îl vom compila prin terminalul Linux Mint 20 cu următoarea comandă:

$ gcc -o Mutex Mutex.cpp -pthread

Aici, „Mutex”, după semnul „-o”, se referă la numele fișierului obiect care va fi creat, în timp ce „Mutex.cpp ”este numele originalului .fișier CPP. Semnalizatorul „-pthread” este necesar pentru a compila acest program deoarece acest program este scris în timp ce se utilizează biblioteca „pthread”. Dacă omiteți acest semnal, programul dvs. nu va fi compilat și va reda unele erori. Compilația de succes a noastră .fișierul cpp nu va produce niciun mesaj pe terminal, așa cum se arată în imaginea de mai jos:

Pasul 3: Rularea programului C în Linux Mint 20

Odată ce fișierul obiect numit „Mutex” a fost creat, îl putem rula folosind următoarea comandă:

$ ./ Mutex

În rezultatul Mutex-ului nostru.cpp program, veți observa că primul Job 1 a început, ceea ce înseamnă că firul # 1 a dobândit blocarea Mutex. După aceea, Iov 1 termină după ceva timp. Apoi, începe Job 2, ceea ce înseamnă că firul # 2 a dobândit blocarea Mutex. Acesta va fi deblocat doar după terminarea Jobului 2.

Concluzie

Acest articol a oferit o explicație aprofundată a utilizării Posix Mutex cu programare C în Linux Mint 20. Mutex poate fi folosit foarte eficient pentru a evita condițiile cursei în timpul programării, incluzând pur și simplu biblioteca Posix sau pthread în codul nostru C. Acest lucru nu numai că va asigura coerența datelor, ci va face și procesarea mult mai eficientă.

Cel mai bun lucru despre utilizarea bibliotecii Posix în Linux este că nu avem nevoie nici măcar să instalăm software specializat, pachete sau compilator pentru aceasta. Codul C poate fi scris pur și simplu în orice editor de text implicit de pe Linux și poate fi compilat și rulat cu compilatoarele implicite gcc sau g ++. Acest lucru se dovedește a fi un strat suplimentar de ușurință și comoditate în utilizarea Posix Mutex cu programare C în Linux Mint 20.

How to change Mouse pointer and cursor size, color & scheme on Windows 10
The mouse pointer and cursor in Windows 10 are very important aspects of the operating system. This can be said for other operating systems as well, s...
Motoare de jocuri gratuite și open source pentru dezvoltarea jocurilor Linux
Acest articol va acoperi o listă de motoare de jocuri gratuite și open source care pot fi utilizate pentru dezvoltarea jocurilor 2D și 3D pe Linux. Ex...
Tutorial Shadow of the Tomb Raider pentru Linux
Shadow of the Tomb Raider este a douăsprezecea completare a seriei Tomb Raider - o franciză de jocuri de acțiune-aventură creată de Eidos Montreal. Jo...