Problem z funkcja FORK

0

Witam

mam pytanko dot. poniższego kodu :

 
#include <iostream>
#include <unistd.h>
#include <sys/types.h>

using namespace std;

int main()
{
pid_t pid;

pid = 0;

if( pid == 0) cout << " Potomek" << endl;
else cout << " Rodzic" << endl;

cout << "getpid = " << getpid()<<endl;

return 0;
}

Dlaczego otrzymuję wynik w takiej kolejności
Rodzic
GetPid 4431
Potomek
GetPid 4432

a nie w kolejnosci
Rodzic
Potomek
GetPid 4431
GetPid 4432

Pozdrawiam
M.

0

? Nie rozumiem pytania. Przecież fork() startuje nowy proces. To w jakiej kolejności wykonają się operacje to random, zależy tylko od szeregowania procesów przez system operacyjny.

0

Dla mnie nie ma znaczenia czy pierwszy bedzie dziecko czy rodzic
Tylko po wywołaniu fork idą jak by dwa programy równocześnie. więc finalnie powinnismy otrzymać

Rodzic
Dzieco
pid
pid
lub
dziecko
rodzic
pid
pid

0

Tylko po wywołaniu fork idą jak by dwa programy równocześnie

No właśnie - "tak jakby". Wciąż odpowiedzią na to będzie wypowiedź Shaloma.

0

Dalej nie rozumiem

0

OMG. Ale te programy IDĄ RÓWNOCZEŚNIE. Chyba ze pracujesz pod DOSem. Jak masz więcej niż 1 rdzeń procesora to w ogóle mogą iść równolegle. Przecież nowoczesne systemy operacyjne od lat są systemami z podziałem czasu. Jak sobie to wyobrażasz że na raz działa ci w systemie kilkadziesiąt programów? Kilkanaście na jeden rdzeń procesora? przecież procesor moze wykonywać tylko jedną operację na raz! Dzieję się tak, dlatego że system operacyjny przydziela danemu programowi pewien kwant czasu w którym procesor wykonuje instrukcje tego programu, potem ten program trafia na koniec kolejki i procesor wykonuje operacje innego programu. Dzięki temu "wydaje ci się" że te wszystkie programy działają jednocześnie.

0

to już zdązyłem przeczytać + planiści i inne rzeczy.

Dla mnie równocześnie oznacza że idą jak by łeb w łeb
a nie ma czekania aż jeden się skończy a potem drugi

0

Toś chyba nic nie zrozumiał z tego czytania o planiście. Przecież to nie jest tak że program dostaje procesor na czas wykonania jednej instrukcji, bo koszt przełączania się między procesami jest za duży. Proces dostaje procesor na pewien czas i ile mu się w tym czasie uda wykonać operacji to jest jego szczęście. Może uda mu się wykonać w całości, może nie, nigdy tego nie wiesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1