Oletetaan, että on olemassa pääketju A, jonka tehtävänä on laskea muuttujien w ja y summa, missä w = x + 1 ja y = z + 2. Käyttäjä hakee muuttujien x ja z arvot. Tässä skenaariossa voimme luoda kaksi ketjua, B ja C. Lankan B tehtävänä on ottaa muuttujan x arvo käyttäjältä, lisätä sitä yhdellä ja tallentaa se muuttujaan w. Lankan C tehtävänä on ottaa muuttujan z arvo käyttäjältä, lisätä sitä 2 ja tallentaa se sitten muuttujaan y. Lopuksi molemmat säikeet luovuttavat nämä tulokset pääkierteelle A, joka sitten laskee niiden summan ja näyttää lopputuloksen.
Jos emme olisi luoneet ketjuja tässä skenaariossa, pääketju A olisi suorittanut kaikki tehtävät paljon suuremmassa ajassa. Tällä tavalla ketjut voivat suorittaa laskutasi tehokkaasti ilman turhia viivytyksiä. Langan käytöstä on kuitenkin erittäin suuri huolenaihe, joka tunnetaan nimellä "kilpailutila". Kyseessä on tilanne, jossa kaksi ketjua yrittää päästä käsiksi ja muokata samoja tietoja, jolloin ne ovat epäjohdonmukaisia. Ohjelmoijana tavoitteemme tulisi olla välttää kilpailuolosuhteet sulavimmalla tavalla.
Yleisimmin käytetty ratkaisu kilpailuolosuhteiden välttämiseksi on Mutexin käyttö. Mutex tarkoittaa keskinäistä poissulkemista, ja se tarjoaa meille periaatteessa lukitusmekanismin, joka estää kriittisten tietojen pääsyn ja muokkaamisen useammalle kuin yhdelle käyttäjälle kerrallaan. Tällä tavoin varmistetaan tietojen yhdenmukaisuus. Posix on pohjimmiltaan kirjasto, joka tarjoaa meille erilaisia sisäänrakennettuja toimintoja, jotka helpottavat ketjujen ja Mutexin käyttöönottoa. Seuraavan esimerkin avulla yritämme oppia Posix Mutexin käytön C-ohjelmoinnilla Linux Mint 20: ssä.
Esimerkki Posix Mutexin käytöstä C-ohjelmoinnin kanssa Linux Mint 20: ssä
Suoritamme seuraavat kolme vaihetta Positx Mutexin ja C-ohjelmoinnin käytön opastamiseksi Linux Mint 20: ssä.
Vaihe 1: Luo ohjelma, joka osoittaa Posix Mutexin käytön C-ohjelmoinnilla Linux Mint 20: ssä
Ensinnäkin luomme .cpp-tiedosto Linux Mint 20 -järjestelmässämme. Menemme yksinkertaisesti kotikansioon, luomme tyhjän asiakirjan ja nimeämme sen Mutexiksi.cpp. Kerran meidän .cpp-tiedosto on luotu, avaamme sen tekstieditorilla. Sen jälkeen kirjoitamme alla olevissa kuvissa näkyvän koodin .cpp-tiedosto:
Kummassakin yllä olevassa kuvassa näkyvä koodi loi kaksi erilaista säiettä. Ensimmäinen ketju vastaa työtä # 1, kun taas toinen ketju vastaa työtä # 2. Sitten olemme luoneet esimerkkitoiminnon nimeltä "Mutex-toiminto". Tässä toiminnossa lukitsemme ensin Mutex-lukitusmuuttujan, ja se avataan vasta, kun säie 1 on valmis työn # 1. Vastaavasti Mutex-lukitusmuuttuja lukitaan jälleen kierteellä # 2, kunnes se viimeistelee työn # 2. Tätä "Mutex-toimintoa" kutsutaan "pää" -toiminnolla.
Vaihe 2: C-ohjelman kokoaminen Linux Mint 20: ssä
Tallentamisen jälkeen .cpp-tiedosto, käännämme sen nyt Linux Mint 20 -päätteen kautta seuraavalla komennolla:
$ gcc -o Mutex Mutex.cpp -lanka
Tässä "Mutex" viittaa "-o" -merkin jälkeen luodun objektitiedoston nimeen, kun taas "Mutex".cpp ”on alkuperäisen nimi .cpp-tiedosto. Lippu “-pthread” on välttämätön tämän ohjelman kokoamiseksi, koska tämä ohjelma kirjoitetaan käytettäessä ”pthread” -kirjastoa. Jos jätät tämän lipun pois, ohjelmaa ei käännetä ja se tekee joitain virheitä. Onnistunut kokoaminen meidän .cpp-tiedosto ei tuota viestejä päätelaitteessa, kuten alla olevassa kuvassa näkyy:
Vaihe 3: C-ohjelman suorittaminen Linux Mint 20: ssä
Kun "Mutex" -niminen objektitiedosto on luotu, voimme suorittaa sen seuraavalla komennolla:
$ ./ Mutex
Muteximme tuotoksessa.cpp-ohjelmassa huomaat, että ensimmäinen Job 1 on alkanut, mikä tarkoittaa, että ketju # 1 on hankkinut Mutex-lukituksen. Sen jälkeen Job 1 päättyy jonkin ajan kuluttua. Sitten Job 2 alkaa, mikä tarkoittaa, että lanka # 2 on hankkinut Mutex-lukon. Se avataan vasta, kun Job 2 on valmis.
Johtopäätös
Tämä artikkeli antoi perusteellisen selvityksen Posix Mutexin käytöstä C-ohjelmoinnilla Linux Mint 20: ssä. Mutexia voidaan käyttää erittäin tehokkaasti kilpailuolosuhteiden välttämiseksi ohjelmoinnin yhteydessä yksinkertaisesti sisällyttämällä Posix- tai pthread-kirjasto C-koodiin. Tämä ei ainoastaan takaa tietojen johdonmukaisuutta, vaan myös parantaa käsittelyä.
Parasta Posix-kirjaston käytössä Linuxissa on, että meidän ei edes tarvitse asentaa mitään erikoistuneita ohjelmistoja, paketteja tai kääntäjiä sille. C-koodi voidaan yksinkertaisesti kirjoittaa mihin tahansa oletustekstieditoriin Linuxissa, ja se voidaan kääntää ja suorittaa oletusarvoisilla gcc- tai g ++-kääntäjillä. Tämä osoittautuu lisättynä helppokäyttöisyyteen Posix Mutexin ja C-ohjelmoinnin käytössä Linux Mint 20: ssä.