Programowanie C

Semafory POSIX z programowaniem w C

Semafory POSIX z programowaniem w C

POSIX odnosi się do przenośnego interfejsu systemu operacyjnego, który jest standardem IEEE opracowanym w celu ułatwienia przenoszenia różnych aplikacji. POSIX to próba zbudowania wspólnej, znormalizowanej wersji UNIX poprzez współpracę dostawców. Ułatwiłoby to przenoszenie aplikacji między platformami sprzętowymi, gdyby były skuteczne. Hewlett-Packard integruje POSIX z licencjonowanym systemem operacyjnym MPE/iX w wersji 5.0 i HP/UXX wersja 10.0, odpowiednio (jego UNIX).

Standard POSIX ma znacznie więcej niż dziesięć części, jednak dwie są łatwo dostępne. POSIX.1 opisuje interfejsy programowania C (i.mi., biblioteka wywołań systemowych) dla plików, procedur i terminali I/O. Biblioteka pakietów C POSIX dla platform POSIX jest szkieletem standardowej biblioteki C. Jest to ustalone w tym samym czasie, co standard ANSI C. Aby uczynić POSIX zgodnym ze standardem C, podjęto kilka prób. POSIX zapewnia dodatkowe funkcje do tych zaimplementowanych w standardzie C.

Semafory POSIX

Semafor to struktura danych często używana do synchronizowania procesów i wspomagania wątków bez ich wzajemnej interakcji w celu wspólnego działania. Interfejs dla semaforów jest określony przez standard POSIX. Nie jest częścią Pthreads. Jednak większość systemów UNIX obsługujących Pthreads zapewnia nawet semafory. W frameworkach uniksowych, takich jak Linux, semafory są łączone z kolejkami komunikatów i wspólną pamięcią pod usługami komunikacji międzyprocesowej (IPC). Starsze semafory frameworka V i nowoczesne semafory POSIX stają się dwoma typami semaforów. Wywoływanie POSIX Semaphore jest o wiele łatwiejsze niż wywołania Semaphore System V. Chociaż semafory z Systemu V są łatwiejsze do uzyskania, szczególnie na wcześniejszych platformach uniksopodobnych. Istnieje potrzeba podłączenia programów używających semaforów POSIX do biblioteki Pthread. W tym artykule przyjrzymy się semaforom POSIX.

Dlaczego semafory POSIX?

Wokół wątków jest duży problem, czyli „warunki wyścigu”. Jest to okoliczność, w której dwie wątki starają się uzyskać i zmienić te same informacje, przez co stają się one sprzeczne. Aby uniknąć sytuacji wyścigu, używamy semaforów od bardzo dawna.

Semafory dostępne są w 2 rodzajach:

Semafor binarny:

Jest również rozpoznawany jako blokada mutex. Miałby tylko dwie możliwe wartości, 0 i 1. Wartość zostanie zainicjowana jako 1. Jest używany do egzekwowania wielu procesów w celu rozwiązania poważnego problemu z sekcją.

Liczenie semaforów:

Jego rozmiar może się różnić w całej domenie bez ograniczeń. Jest używany do sprawowania władzy nad dostępem do zasobów o wielu instancjach.

Framework Linux POSIX ma swoje zintegrowane repozytorium Semaphore. Aby z niego skorzystać, musimy:

Prawie wszystkie metody i formularze POSIX Semaphore są prototypowane lub określone w 'Semaphore'.h. Będziemy używać semafora do opisania bytu lub obiektu jako:

>> sem_t nazwa_sem;

Oto różne funkcje, których używalibyśmy w POSIX Semaphore.

Sem_init

Aby zainicjować semafor, musisz użyć metody sem_init. W tej funkcji sem odpowiada zainicjowanemu obiektowi semafora. Pshared to baner lub flaga określająca, czy semafor może być udostępniany za pomocą procedury forked(), czy nie. Współdzielone semafory nie są obecnie wspierane przez LinuxThreads. Wartość argumentu jest wartością początkową, przy której semafor jest ustalony.

>> int sem_init(sem_t *sem, int pshared, unsigned int value);

Sem_czekaj

Będziemy używać metody sem-wait, aby zatrzymać/zablokować semafor lub sprawić, by czekał. Jeżeli semaforowi podano wartość ujemną, cykl wywołań zostanie automatycznie zablokowany. Za każdym razem, gdy jakikolwiek inny wątek wywoła sem_post, budzi się jeden z już zatkanych procesów.

>> int sem_czekaj(sem_t *sem);

Sem_post

Użyjemy metody sem_post, aby zwiększyć wartość semafora. Po wywołaniu sem_post zwiększy wartość i obudzi się jeden z już zatkanych lub oczekujących procesów.

>> int sem_post(sem_t *sem);

Sem_getvalue

Jeśli chcesz wiedzieć o wartości semafora, musisz użyć poniższej funkcji sem_getvalue . Uzyska aktualną wartość semafora i zostanie umieszczony w miejscu docelowym valp-point.

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

Sem_destroy

Powinieneś użyć metody sem_destroy, jeśli chcesz zniszczyć semafor. Jeśli upadek semafora ma postępować, żaden wątek nie będzie czekał w semaforze.

>> Int sem_destroy(sem_t *sem);

Zainstaluj narzędzie GCC

Aby skompilować kod POSIX Semaphore C, musisz mieć zainstalowane narzędzie gcc w swoim systemie Linux. W tym celu otwórz terminal poleceń i wypróbuj poniższe polecenie.

$ sudo apt-get install gcc

Potwierdź swoją akcję, naciskając Tak.

Implementacja POSIX Semaphore z programowaniem w C w Ubuntu

Na samym początku musisz utworzyć nowy plik z .rozszerzenie cpp na Ubuntu 20.04 system. W tym celu musisz przejść do katalogu domowego i utworzyć nowy pusty plik o nazwie nowy.cpp. Możesz go również utworzyć za pomocą polecenia dotykowego w terminalu poleceń.

Widać, że nowy.Plik cpp został utworzony w katalogu domowym.


Po utworzeniu .cpp, otwórz go jako edytor tekstu w systemie Linux i napisz poniższy kod w tym pliku tak, jak jest. Następnie zapisz i zamknij.

Uruchom program POSIX Semaphore C w Ubuntu 20.04

Otwórz swój terminal w Ubuntu 20.04 i wykonaj poniższe polecenie gcc, a następnie nazwę pliku.

$ nazwa pliku gcc.c -lpthread -lrt

Powstają 2 nitki, jedna powstaje po 2 sekundach drugiej. Po otrzymaniu śruby pierwszy wątek śpi przez 4 sekundy. Tak więc, po jego wywołaniu, drugi wątek nie dołączyłby bezpośrednio i pojawi się to 4-2=2 sekundy po jego wywołaniu. Oto wynik:

Gdybyśmy nie używali semafora, zgodnie z przełączaniem kontekstu, wynik mógłby wyglądać tak:

Wniosek

W tym przewodniku podano szczegółowy przegląd użycia POSIXSemaphore z programowaniem w C w Ubuntu 20. Używając jedynie biblioteki POSIX lub Pthread w pewnym kodzie C, semafor POSIX może być dość łatwo użyty do zapobiegania wyścigom podczas kodowania.

Cursor jumps or moves randomly while typing in Windows 10
If you find that your mouse cursor jumps or moves on its own, automatically, randomly while typing in Windows laptop or computer, then some of these s...
How to reverse Mouse and Touchpads scrolling direction in Windows 10
Mouse and Touchpads not only make computing easy but more efficient and less time-consuming. We cannot imagine a life without these devices, but still...
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...