Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Kalkulacje w procesie  (Przeczytany 3915 razy)

des

  • Gość
Kalkulacje w procesie
« dnia: 2010-11-24, 12:52:37 »
Chciałbym uruchomić kilka procesów i w tych procesach niezależnie sumować albo wymnażać jakieś liczby, a następnie sprawdzać wynik. Wiem, że nowy proces mogę uruchomić za pomocą funkcji fork() ale co dalej? Jak w ramach procesu sumować liczby? Czy muszę w procesie uruchomić nowy program za pomocą execve()?

Od razu zastrzegam, że nie czekam na gotowca. Proszę tylko o nakierowanie na ten temat, może jakaś literatura?

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Kalkulacje w procesie
« Odpowiedź #1 dnia: 2010-11-24, 14:24:23 »
1. Czy to MUSZĄ być procesy? Takie rzeczy lepiej robi się na wątkach (thread), mogą one bowiem współdzielić dane.
2. Po wykonaniu funkcji "fork()" pojawiają się 2 identyczne działające programy: jeden jako rezultat fork() dostaje 0, to jest program potomny, drugi jako rezultat dostaje <>0, to jest oryginalny proces a wartość fork to PID potomka.
3. W sumie nie musisz robić exec...(), po prostu wykrywasz wartość zwracaną przez fork(). Jeżeli ==0, to skaczesz do obliczeń, w przeciwnym wypadku kontynuujesz zarządzanie.
4. Do komunikacji między procesami w "szkolnych" zadaniach używa się potoków nienazwanych. Tworzysz je funkcją int pipe(int handle[2]). Odpalasz pipe() przed fork(). U rodzica zamykasz koniec do czytania, u potomka do pisania i masz kanał rodzic->potomek. Jeżeli zrobisz 2-gi pipe i zamkniesz na odwrót, to masz kanał potomek->rodzic. Robiąc parę potoków dla każdego potomka masz kontakt z każdym z nich do dawania poleceń i odbierania wyników.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

des

  • Gość
Kalkulacje w procesie
« Odpowiedź #2 dnia: 2010-11-30, 13:20:55 »
Mam jeszcze jedno pytanie - jak przechowywać aktualny wynik obliczeń w każdym procesie. Chciałbym osiągnąć taki efekt, że każdy proces prowadzi obliczenia jednocześnie, a na żądanie zwraca wynik. Czy w tym celu mam przechowywać wynik w jakiejś tablicy? Czy to jest jedyne rozwiązanie czy można to rozwiązać inaczej/lepiej?

chmooreck

  • Gość
Kalkulacje w procesie
« Odpowiedź #3 dnia: 2010-11-30, 14:07:06 »
Cytat: pkraszewski
1. Czy to MUSZĄ być procesy? Takie rzeczy lepiej robi się na wątkach (thread), mogą one bowiem współdzielić dane.
Procesy również, przez pamięć współdzieloną.

Cytat: des
Czy w tym celu mam przechowywać wynik w jakiejś tablicy? Czy to jest jedyne rozwiązanie czy można to rozwiązać inaczej/lepiej?
Przykład podał kolega pkraszewski w pkt.4 ;-)

Najlepiej poczytaj sobie trochę o metodach komunikacji między procesami i wybierz najlepszy sposób dla Twojego przypadku