Pretpostavimo da postoji glavna nit A, čiji je posao izračunati zbroj varijabli w i y gdje je w = x + 1 i y = z + 2. Vrijednosti varijabli x i z korisnik treba dohvatiti. U ovom scenariju možemo stvoriti dvije niti, B i C. Posao niti B bit će uzeti vrijednost varijable x od korisnika, povećati je za 1 i spremiti u varijablu w. Posao niti C bit će preuzeti vrijednost varijable z od korisnika, povećati je za 2, a zatim spremiti u varijablu y. Konačno, obje će niti predati ove rezultate glavnoj niti A, koja će tada izračunati njihov zbroj i prikazati konačni rezultat.
Da u ovom scenariju ne bismo stvorili niti, tada bi sve zadatke glavnu nit A izvodila u mnogo većem vremenu. Na taj način niti mogu učinkovito izvršiti vaše izračune bez nepotrebnih odgađanja. Međutim, postoji vrlo velika zabrinutost zbog upotrebe niti, koja je poznata kao "stanje utrke". To je situacija u kojoj dvije niti pokušavaju pristupiti i izmijeniti iste podatke, što ih ostavlja nedosljednima. Kao programeru, naš bi cilj trebao biti izbjegavanje uvjeta utrke na najgraciozniji način.
Rješenje koje se najčešće koristi za izbjegavanje uvjeta utrke je upotreba Mutexa. Mutex se zalaže za uzajamno isključivanje i u osnovi nam pruža mehanizam zaključavanja koji istovremeno sprečava pristup i izmjenu kritičnih podataka od više korisnika. Na taj se način osigurava dosljednost podataka. Posix je u osnovi knjižnica koja nam predstavlja različite ugrađene funkcije koje znatno olakšavaju implementaciju niti i Mutexa. Sljedećim ćemo primjerom pokušati naučiti upotrebu Posix Mutexa s C programiranjem u Linux Mint 20.
Primjer upotrebe Posix Mutexa s C programiranjem u Linux Mint 20
Izvest ćemo sljedeća tri koraka kako bismo vas proveli kroz upotrebu Posix Mutexa s C programiranjem u Linux Mint 20.
1. korak: Stvaranje programa koji demonstrira upotrebu Posix Mutexa s C programiranjem u Linux Mint 20
Prije svega, mi ćemo stvoriti .cpp datoteku na našem Linux Mint 20 sustavu. Jednostavno ćemo otići do mape Početna, stvoriti prazan dokument i nazvati ga Mutex.cpp. Jednom naša .cpp datoteka stvorena, otvorit ćemo je s uređivačem teksta. Nakon toga, na naš ćemo tip upisati kod prikazan na slikama ispod .cpp datoteka:
Kôd prikazan na dvije gornje slike stvorio je dvije različite niti. Prva nit odgovara zadatku # 1, dok druga nit odgovara zadatku # 2. Tada smo stvorili uzorak funkcije nazvane "Mutex funkcija". U ovoj funkciji prvo zaključavamo varijablu zaključavanja Mutex, a ona će se otključati tek kada nit # 1 završi posao # 1. Slično tome, varijabla zaključavanja Mutex opet će biti zaključana niti # 2 dok ne završi posao # 2. Ovu "Mutex funkciju" naziva funkcija "glavna".
Korak # 2: Sastavljanje C programa u Linux Mint 20
Nakon spremanja .cpp datoteku, sada ćemo je prevesti preko terminala Linux Mint 20 sa sljedećom naredbom:
$ gcc -o Mutex Mutex.cpp -pthread
Ovdje se "Mutex", nakon zastavice "-o", odnosi na naziv objektne datoteke koja će se stvoriti, dok "Mutex".cpp ”naziv je izvornika .cpp datoteku. Oznaka "-pthread" neophodna je za sastavljanje ovog programa jer je ovaj program napisan dok se koristi biblioteka "pthread". Ako izostavite ovu zastavicu, vaš se program neće sastaviti i rezultirat će pogreškama. Uspješna kompilacija našeg .cpp datoteka neće stvoriti nikakve poruke na terminalu, kao što je prikazano na donjoj slici:
Korak # 3: Pokretanje C programa u Linux Mint 20
Jednom kada je kreirana objektna datoteka pod nazivom "Mutex", možemo je pokrenuti pomoću sljedeće naredbe:
$ ./ Mutex
U izlazu našeg Mutexa.cpp program, primijetit ćete da je prvi posao 1 započeo, što znači da je nit # 1 stekla Mutex bravu. Nakon toga, posao 1 završava nakon nekog vremena. Zatim započinje posao 2, što znači da je nit # 2 stekla Mutex bravu. Otključat će se tek nakon završetka posla 2.
Zaključak
Ovaj je članak pružio detaljno objašnjenje upotrebe Posix Mutexa s C programiranjem u Linux Mint 20. Mutex se može vrlo učinkovito koristiti za izbjegavanje uvjeta utrke tijekom programiranja jednostavnim uključivanjem biblioteke Posix ili pthread u naš C kod. To ne samo da će osigurati dosljednost podataka već će i obradu učiniti mnogo učinkovitijom.
Najbolja stvar kod korištenja Posix biblioteke u Linuxu je ta što za nju čak ne trebamo instalirati nikakav specijalizirani softver, pakete ili kompajler. C kod se može jednostavno napisati u bilo kojem zadanom uređivaču teksta na Linuxu, a može se kompilirati i pokrenuti sa zadanim kompajlerima gcc ili g ++. Ovo se pokazalo dodatnim slojem lakoće i praktičnosti u korištenju Posix Mutexa s C programiranjem u Linux Mint 20.