online kép - Fájl  tube fájl feltöltés file feltöltés - adja hozzá a fájlokat online fedezze fel a legújabb online dokumentumok Kapcsolat
   
 

Letöltheto dokumentumok, programok, törvények, tervezetek, javaslatok, egyéb hasznos információk, receptek - Fájl kiterjesztések - fajltube.com

 

Online dokumentumok - kep
   
kategória
 

Biológia állatok Fizikai Földrajz Kémia Matematika Növénytan Számítógépes
Filozófia
Gazdaság
Gyógyszer
Irodalom
Menedzsment
Receptek
Vegyes

 
 
 
 













































 
 

Klasszikus IPC problémak (processzus kommunikació)

számítógépes

Fájl küldése e-mail Esszé Projekt


egyéb tételek

 
A szöveg specialis objektumainak kezelése
Windows XP (magyar) új kapcsolat létrehozasa
Cisco VoIP termékek
Hattértarak és jellemzöik
NOVELL NETWARE jellemzői
A MESTERSÉGES INTELLIGENCIA MÓDSZEREI A PROGRAMOZHATÓ AUTOMATÁKBAN
Az SQL lekérdezőnyelv hasznalata
Adatok tömörített tarolasa – előnyök, hatranyok
Fajlrendszerek
Input perifériak
 
 

Klasszikus IPC problémák (processzus kommunikáció)

1.      Étkező filozófusok problémája

Öt filozófus ül egy kerek asztal körül és van egy tányér spagettijük, ám a spagetti olyan cs 545e43f úszós, hogy két villa kell az étkezéshez.

Egy filozófus élete egymást váltakozó evésből és gondolkodásból áll.

Ha egy filozófus éhes lesz, megpróbálja megszerezni mindkét villát, de egyszerre csak egyet.

#define N 5

Void philosopher (int i)

}

Mind az öt egyszerre veszi fel a bal villát! (éheztetés)

Éheztetés: Minden program korlátlan ideig fut, de nem tesz semmit a fejlődés érdekében.

#define N 5

#define LEFT (i-1)%N                         //i bal szomszédjának a száma

#define RIGHT (i+1%N)                                  //i jobb szomszédjának a száma

#define THINKING 0                          //a filozófus gondolkodik

#define HUNGRY 1                                         //a filozófus megpróbál villát szerezni

#define EATING 2                                           //a filozófus eszik

typedef int semaphore;

int state[N];                                                      //tömb az állapotok nyomon követésére

semaphore mutex=1;                                        //a kritikus szekciók kölcsönös kizárása

semaphore s[N];                                               //filozófusonként egy szemafor

Void philosopher (int i)                         //filozófusszám 0 – (N-1)-ig

}

Void take_forks (int i)                           //i a filozófus száma

Void test(i)

}

Egy filozófus csak akkor het, ha egyik szomszédja sem eszik.

2.      Olvasók-írók problémája

A filozófus probléma csak akkor jó, ha a processzusok korlátozott számú erőforrást pl. B/K-t használnak.

Ez a probléma adatbázis elérését modellezi.(pl. légitársaság helyfoglalási rendszere). Az elfogadható, hogy több processzus olvassa az adatbázist, de az nem, hogy több írja egyidejűleg.

Typedef int semaphore;

Semaphore mutex=1;                                                    //rc elérését vezérli

Semaphore db=1;                                                         //az adatbázis elérését vezérli

Int rc=0;                                                                       //az olvasók vagy az akarók száma

Void reader (void)

}

Void writer (void)

}

Az első olvasó végrehajt egy DOWN-t a db szemaforon.

A következő olvasók csak az rc számlálót növelik.

Az utolsó kilépő végrehajt egy UP-ot a szemaforon, megengedve a blokkolt írónak ha van ilyen a belépést.

Az író csak abba léphet be, amibe az olvasók száma 0-ra csökken.

Megelőzendő ha jön egy író a többi új olvasó blokkolódik.

3.      Alvó borbély probléma

Fodrászüzletben egy borbély van, egy borbélyszék, és n várakozószék. Ha nincs vendég a borbély alszik. Ha vendég jön, a borbélyt fel kell ébreszteni. Ha a borbély dolgozik és új vendég jön, akkor ha van várakozószék, leülteti, ha nincs elküldi.

Feladat a fenti helyzet versenyhelyzet nélküli programozása.

#define CHAIRS 5                                                       //öt várakozó szék

typedef int semaphore;

semaphore customers=0;                                              //kiszolgálásra váró vendégek száma

semaphore barbers=0;                                      //vendégre váró borbélyok száma 0 vagy 1

semaphore mutex=1;                                                    //kölcsönös kizárás waitinghez

int waiting=0;                                                                //hajvágásra váró vendégek száma

Void barber (void)

}

Void customer (void)

  else 

}

Waitingre azért van szükség, mert a szemafor aktuális értékét nem tudjuk kiolvasni, így ebben tároljuk a másolatát.

A borbély kezdésképpen végrehajtja a barber függvényt, és elmegy aludni, míg nem jön egy vendég.

Az Up(customers) felébreszti a borbélyt. Ha customer *** a mutexet, a borbély elkapja azt ***, majd elvégzi a hajvágást. A vendégeknek nincs ismétlés.

Találat: 1092