Nowe posty

Autor Wątek: Synchronizacja procesów  (Przeczytany 4012 razy)

wolandd

  • Gość
Synchronizacja procesów
« dnia: 2009-06-20, 18:02:40 »
Mam prośbę o pomoc. Pod linuksa prawie w ogóle dotąd nie programowałem, a potrzebuję rozwiązać pewien problem. Podam na prostym przykładzie:

Są dwa procesy. Każdy proces składa się z np. 5 iteracji.
Każda iteracja wygląda następująco:

Cytuj
- Wypisanie: "PID - początek"
  początek sekcji krytycznej
- Wypisanie: "PID - wewnątrz sekcji krytycznej"
  koniec sekcji krytycznej
- Wypisanie: "PID - koniec"
- Sleep np. na 0,5 sekundy
(*) słówko PID oznacza oczywiście identyfikator procesu wyświetlającego dany napis.

I teraz chodzi o to, że procesy powinny być zsynchronizowane w taki sposób, aby operacje zaznaczone jako sekcja
krytyczna
były wykonywane w dowolnym momencie tylko przez dokładnie jeden proces (bo są tam, powiedzmy, używane jakieś zasoby, np. drukarka).

Chciałbym prosić o pomoc w napisaniu "fundamentów" tego programu, czyli pętli i synchronizacji procesów, a resztę (to znaczy to co faktycznie ma program robić) już sobie potem sam dobuduję.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Synchronizacja procesów
« Odpowiedź #1 dnia: 2009-06-20, 22:18:19 »
Mam nadzieję, że inni mnie nie oskalpują:

Wsadź nos do strony manuala sem_overview i poszukaj info o named semaphores.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

wolandd

  • Gość
Synchronizacja procesów
« Odpowiedź #2 dnia: 2009-06-20, 22:48:53 »
Wsadziłem, nie tylko do tej strony, ale za słaby jestem z tego, żeby zrozumieć jak to napisać. Biorąc pod uwagę na jakim etapie jestem z programowaniem, to nie dam rady sam napisać tego kodu, który potrzebuję. Pomoże ktoś?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3066
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Synchronizacja procesów
« Odpowiedź #3 dnia: 2009-06-20, 23:55:52 »
No żesz *&@^$@(! Masz aż całe 4 funkcje - stwórz/otwórz semafor, zablokuj, odblokuj i zamknij. Semafor z wartością początkową równą 1 to inaczej tzw muteks (mutex), czyli jedna z możłiwych realizacji sekcji krytycznej. W tym przypadku sem_wait odpowiada za wejście do sekcji krytycznej a sem_post za koniec sekcji krytycznej.

Tu http://www.amparo.net/ce155/sem-ex.html masz przykład (na wątkach, ale łatwo da się zgeneralizować na procesy - sem_init zamieniasz na sem_open).

za słaby jestem z tego, żeby zrozumieć jak to napisać - mozę zmienić kierunek studiów?
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

wolandd

  • Gość
Synchronizacja procesów
« Odpowiedź #4 dnia: 2009-06-21, 13:25:50 »
do usuniecia