„Chociaż każdy język programowania ma wiele bibliotek do określonych celów, biblioteka Posix C ma swoje miejsce. Został zaprojektowany tak, aby stworzyć wielką harmonizację między procesami i bardzo pomaga w użyciu wielowy w programach, tj.mi., Tworzenie wielu wątków i synchronizacja ich wykonania. W ramach tego przewodnika zobaczysz prostą ilustrację używania semafory posix w c. W przypadku podstawowych przykładów kodu C musimy skonfigurować jego kompilator w systemie. Ale wcześniej musimy zaktualizować system, ponieważ jest to konieczny krok do sprawnego wykonywania kodu. Zatem zapytanie wyświetlane w załączonym snapie jest obowiązkowym do aktualizacji i aktualizacji systemu operacyjnego Linux za pomocą narzędzia „apt”."
Proces ten wymagał około 55 kb miejsca na platformie Linux, aby płynnie wykonywać aktualizacje. Jeśli chcesz dać tyle miejsca, dotknij „Y”, aby kontynuować. Przetwarzanie zostanie zakończone za kilka minut.
Po w pełni zaktualizowaniu systemu skonfigurujemy kompilator języka C w naszym systemie z narzędziem apt-get w poleceniu „instaluj”. Użyj „GCC” jako słowa kluczowego i to wszystko.
Sem_init ()
Świeży semafor zostałby stworzony, gdy w „S” jest już niezidentyfikowana semafor; W przeciwnym razie, że już istniejący semafor zostanie odrzucony. W całej tej metodzie „S” oznacza skonstruowany instancję semaforową, a wspólny jest sygnałem lub proporczykiem, który wskazuje, czy semafor może być dystrybuowany metodą widelców () lub w inny sposób. Wartość wejściowa służy jako punkt początkowy zestawu semaforu.
Int sem_init (sem_t* s, int shared, unsigned int value);
Sem_wait ()
Wykonując akcję blokady Semaphore na semafor określonej przez „S”, metoda sem_wait () utrzymuje ten semafor. Procedura w SEM zostanie zastosowana do zatrzymania semafora lub pozwolić jej stać w kolejce. Niektóre z wcześniej przeciążonych procesów budzą się, gdy jakiś inny proces wywołuje sem_post ().
int sem_wait (sem_t *s);
Sem_post ()
Kiedy nazywany jest post SEM, wartość jest zwiększona, a następnie jeden z uprzednio uruchomiony lub oczekujący operacji zaczyna działać, ja.mi., odblokowuje już zamknięty semafor.
int sem_post (sem_t *s);
Sem_destroy ()
Zainicjowany bezimienny semafor „s” jest zniszczony, stosując funkcję SEM niszczy ().
int sem_destroy (sem_t *s);
Przykład
Aby zrozumieć semafory, najpierw utworzymy plik C, a następnie dodamy do niego kod do niego. Aby utworzyć jeden, użyj zapytania „dotyk”, a znajdziesz nowy plik w folderze domowym systemu.
Teraz musisz otworzyć pusty plik C za pomocą prostego edytora, aby wygenerować w nim dobry kod. Jak dotąd próbowaliśmy edytora „Nano”, jak pokazano w pstryknięciu poniżej.
Jak wszyscy wiemy, że wszystkie języki programowania nie mogą działać bez bibliotek, ponieważ biblioteki te utrzymują dużą liczbę klas, struktur, funkcji i obiektów, które należy wykorzystać do ogólnej pracy systemu. Rozpoczynamy więc ten program C z użyciem niektórych podstawowych i niezbędnych bibliotek dla semaforów POSIX.
Aby użyć tych bibliotek w kodzie, musimy użyć znaku „#” ze słowem kluczowym „dołącz” dla każdej biblioteki. W tej chwili dodaliśmy w sumie 4 biblioteki, które muszą mieć w tym programie. W przeciwnym razie nasz program nie będzie działał poprawnie. Pierwszy „Stdio.Biblioteka nagłówka H ”jest zwykle obowiązkowym w każdym programie C, ponieważ pozwala nam mieć operacje wejściowe i wyjściowe w kodzie. Dlatego używamy go do płynnego dodawania danych wejściowych i uzyskania wyników z kodu. Druga biblioteka, której tu używamy, to „pThread.h ”, który jest koniecznością do użycia programowania wątków, ja.mi., Multitreading.
Będziemy używać tej biblioteki do tworzenia wątków w programie. Następną i najważniejszą biblioteką w tym kodzie jest „Semafor.H". Został wykorzystany do płynnej synchronizacji wątków. Wreszcie biblioteka jest „unistd.h ”, który pozwala nam korzystać z różnych funkcji i stałych zdefiniowanych przez użytkownika. Teraz zadeklarowaliśmy semafor „S” za pomocą wbudowanego obiektu „SEM_T”. Oto funkcja zdefiniowana przez użytkownika wątku „T” bez typu powrotu. Wykorzystuje niektóre wbudowane funkcje semafora do przeprowadzania synchronizacji. Funkcja sem_wait () ma przechowywać semaphore „s” za pomocą postaci „i”.
W obrębie wstrzymania instrukcja printf () została wykonana wraz z funkcją „snu”, aby ten program spał przez 4 sekundy. Kolejna instrukcja printf () wyświetla nową wiadomość, a funkcja sem_post () jest wykonywana w celu uwolnienia blokady na semaphore „s."
#włączać
#włączać
#włączać
#włączać
sem_t s;
void * t (void * arg)
sem_wait (& s);
printf („Witaj! \N");
sen (4);
printf ("pa!\N");
sem_post (& s);
Przyjrzyjmy się metodę tego programu C dla semaforów. Funkcja sem_init () została tutaj wykorzystana do utworzenia nowego semaforu „s”, która nie została rozdzielona metodą Forked (), i.mi., „0”, a jego punkt wyjścia jest ustawiony na 1. Obiekt pthread_t z biblioteki pthread C został wykorzystany do utworzenia dwóch wątków za pomocą dwóch obiektów wątków, O1 i O2. Instrukcja printf () ma wyświetlić, że zamierzamy utworzyć pierwszy wątek za pomocą funkcji pthread_create () w następnym wierszu.
Przekazaliśmy obiekt wątku O1 do tej funkcji z zerowymi ograniczeniami i funkcją wywoływania „t”, przekazując go w parametrach. Po snu 4 sekund utworzono kolejny wątek z obiektem O2, a funkcja pthread_join () jest tutaj używana do dołączenia do wątków z funkcją main (). Funkcja sem_destroy () jest tutaj, aby zniszczyć semafor „s”, a wszystkie zablokowane wątki również zostaną uwolnione.
int main ()
sem_init (& s, 0, 1);
pthread_t o1, o2;
printf („w pierwszym wątku teraz… \ n”);
pthread_create (& o1, null, t, null);
sen (4);
printf („W 2. wątku teraz… \ n”);
pthread_create (& o2, null, t, null);
pthread_join (o1, null);
pthread_join (o2, null);
sem_destroy (& s);
powrót 0;
Opracowujemy program C z kompilatorem „GCC”; Opcje „-LRT” i „-LPTHREAD” są wykorzystywane do wykonywania funkcji wątku POSIX. Po uruchomieniu „.A/.na zapytanie, utworzono pierwszy wątek. Po wydrukowaniu pierwszej wiadomości idzie spać.
Drugi wątek został zsynchronizowany, a po 4 sekundach pierwsza wątek został zwolniony, a drugi wątek został zablokowany przez 4 sekundy.
Ostatecznie wydano również drugi wątek.
Wniosek
To chodzi o semafory poz. Po przejrzeniu tego artykułu będziesz mógł coraz bardziej zrozumieć POSIX.