Programowanie C

Posix Mutex z programowaniem C

Posix Mutex z programowaniem C
Dzisiejszy artykuł skupi się na wykorzystaniu Posix Mutex z programowaniem w C w Linux Mint 20. Jednak zanim przejdziemy do naszego głównego przykładu, chcielibyśmy najpierw wyjaśnić kilka terminologii, aby można było łatwo zrozumieć przykładowy scenariusz, którym się z Tobą podzielimy. W systemach operacyjnych pojęcie wątków jest szeroko stosowane. Wątki to zasadniczo podprocesy, które są delegowane z różnymi zadaniami. Możesz rozważyć następujący przykład, aby zrozumieć działanie wątków.

Załóżmy, że istnieje wątek główny A, którego zadaniem jest obliczenie sumy zmiennych w i y, gdzie w=x+1 i y=z+2. Wartości zmiennych x i z są pobierane przez użytkownika. W tym scenariuszu możemy stworzyć dwa wątki, B i C. Zadaniem wątku B będzie pobranie wartości zmiennej x od użytkownika, zwiększenie jej o 1 i zapisanie jej w zmiennej w. Zadaniem wątku C będzie pobranie wartości zmiennej z od użytkownika, zwiększenie jej o 2, a następnie zapisanie jej w zmiennej y. Na koniec oba te wątki przekażą te wyniki do głównego wątku A, który następnie obliczy ich sumę i wyświetli wynik końcowy.

Gdybyśmy w tym scenariuszu nie tworzyli żadnych wątków, to wszystkie zadania wykonałby wątek główny A w znacznie większym czasie. W ten sposób wątki mogą sprawnie wykonywać obliczenia bez zbędnych opóźnień. Jednak istnieje bardzo poważny problem związany z używaniem nici, co jest znane jako „stan wyścigu”. Jest to sytuacja, w której dwa wątki próbują uzyskać dostęp do tych samych danych i je zmodyfikować, przez co pozostają niespójne. Jako programista naszym celem powinno być unikanie wyścigów w jak najbardziej wdzięczny sposób.

Najczęściej stosowanym rozwiązaniem pozwalającym na uniknięcie wyścigów jest zastosowanie Mutex. Mutex oznacza wzajemne wykluczanie i zasadniczo zapewnia nam mechanizm blokujący, który uniemożliwia dostęp i modyfikację krytycznych danych przez więcej niż jednego użytkownika na raz. W ten sposób zapewniona jest spójność danych. Posix to w zasadzie biblioteka, która prezentuje nam różne wbudowane funkcje, które znacznie ułatwiają implementację wątków i Mutex. Na poniższym przykładzie postaramy się nauczyć korzystania z Posix Mutex z programowaniem w C w Linux Mint 20.

Przykład użycia Posix Mutex z programowaniem C w Linux Mint 20

Wykonamy następujące trzy kroki, aby przeprowadzić Cię przez użycie Posix Mutex z programowaniem C w Linux Mint 20.

Krok #1: Tworzenie programu demonstrującego użycie Posix Mutex z programowaniem C w Linux Mint 20

Przede wszystkim stworzymy .plik cpp w naszym systemie Linux Mint 20. Po prostu przejdziemy do naszego folderu domowego, utworzymy pusty dokument i nazwiemy go Mutex.cpp. Kiedyś nasz .tworzony jest plik cpp, otworzymy go w edytorze tekstu. Następnie wpiszemy kod pokazany na poniższych obrazkach do naszego .plik cpp:

Kod pokazany na dwóch obrazkach powyżej utworzył dwa różne wątki. Pierwszy wątek odpowiada zadaniu nr 1, drugi wątek odpowiada zadaniu nr 2. Następnie stworzyliśmy przykładową funkcję o nazwie „Funkcja Mutex”. W tej funkcji najpierw blokujemy zmienną blokady Mutex i zostanie ona odblokowana dopiero po zakończeniu wątku nr 1 Zadanie nr 1. Podobnie, zmienna blokady Mutex zostanie ponownie zablokowana przez wątek nr 2, dopóki nie zakończy zadania nr 2. Ta „Funkcja Mutex” jest wywoływana przez funkcję „główną”.

Krok #2: Kompilacja programu C w Linux Mint 20

Po zapisaniu .cpp, teraz skompilujemy go za pomocą terminala Linux Mint 20 za pomocą następującego polecenia:

$ gcc -o Mutex Mutex.cpp -pthread

Tutaj „Mutex” po fladze „-o” odnosi się do nazwy pliku obiektowego, który zostanie utworzony, podczas gdy „Mutex.cpp” to nazwa oryginału .plik cpp. Flaga „-pthread” jest niezbędna do skompilowania tego programu, ponieważ ten program jest napisany przy użyciu biblioteki „pthread”. Jeśli pominiesz tę flagę, Twój program nie zostanie skompilowany i będzie powodował błędy. Udana kompilacja naszych .Plik cpp nie wygeneruje żadnych komunikatów na terminalu, jak pokazano na poniższym obrazku:

Krok #3: Uruchamianie programu C w Linux Mint 20

Po utworzeniu pliku obiektowego o nazwie „Mutex” możemy go uruchomić za pomocą następującego polecenia:

$ ./Mutex

W wyjściu naszego Mutex.cpp, zauważysz, że pierwsze zadanie 1 zostało rozpoczęte, co oznacza, że ​​wątek #1 uzyskał blokadę Mutex. Następnie zadanie 1 kończy się po pewnym czasie. Następnie rozpoczyna się zadanie 2, co oznacza, że ​​wątek nr 2 uzyskał blokadę Mutex. Zostanie odblokowane dopiero po zakończeniu zadania 2.

Wniosek

Ten artykuł zawiera szczegółowe wyjaśnienie użycia Posix Mutex z programowaniem w C w Linux Mint 20. Mutex może być używany bardzo skutecznie, aby uniknąć wyścigów podczas programowania, po prostu włączając bibliotekę Posix lub pthread do naszego kodu C. Zapewni to nie tylko spójność danych, ale także sprawi, że przetwarzanie będzie znacznie wydajniejsze.

Najlepszą rzeczą w korzystaniu z biblioteki Posix w systemie Linux jest to, że nie musimy nawet instalować do niej żadnego specjalistycznego oprogramowania, pakietów ani kompilatora. Kod C można po prostu napisać w dowolnym domyślnym edytorze tekstu w systemie Linux i można go skompilować i uruchomić za pomocą domyślnych kompilatorów gcc lub g++. Okazuje się, że jest to dodatkowa warstwa łatwości i wygody w korzystaniu z Posix Mutex z programowaniem C w Linux Mint 20.

Gry Zremasterowane gry HD dla Linuksa, które nigdy wcześniej nie zostały wydane na Linuksa
Zremasterowane gry HD dla Linuksa, które nigdy wcześniej nie zostały wydane na Linuksa
Wielu twórców gier i wydawców wymyśla remaster HD starych gier, aby przedłużyć żywotność serii, prosimy fanów o kompatybilność z nowoczesnym sprzętem ...
Gry Jak używać AutoKey do automatyzacji gier Linux
Jak używać AutoKey do automatyzacji gier Linux
AutoKey to narzędzie do automatyzacji pulpitu dla systemów Linux i X11, zaprogramowane w Python 3, GTK i Qt. Korzystając ze skryptów i funkcji MAKRO, ...
Gry How to Show FPS Counter in Linux Games
How to Show FPS Counter in Linux Games
Linux gaming got a major push when Valve announced Linux support for Steam client and their games in 2012. Since then, many AAA and indie games have m...