pp3 sekcja krytyczna

#include <stdio.h>

#include <stdlib.h>

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

#include <unistd.h>

#include <errno.h>

int id_semafor;

static void opusc_semafor(void)

{

struct sembuf bufor_sem;

bufor_sem.sem_num=0;

bufor_sem.sem_op=-1;

bufor_sem.sem_flg=SEM_UNDO;

int zmien_sem;

while (semop(id_semafor,&bufor_sem,1)) {

if (errno != EAGAIN && errno != EINTR) {

fprintf(stderr,"Blad opuszczania semafora- %s",strerror(errno));

exit(-5);

}

}

printf("\nSemafor zostal opuszczony.\n");

}

static void podnies_semafor(void)

{

int zmien_sem;

struct sembuf bufor_sem;

bufor_sem.sem_num=0;

bufor_sem.sem_op=1;

bufor_sem.sem_flg=SEM_UNDO;

while (semop(id_semafor,&bufor_sem,1)) {

if (errno != EAGAIN && errno != EINTR) {

fprintf(stderr,"Blad podnoszenia semafora- %s",strerror(errno));

exit(-5);

}

}

printf("\nSemafor zostal podniesiony.\n");

}

static void liczba_procesow_czekajacych()

{

int i;

if( (i = semctl(id_semafor, 0, GETNCNT))==-1) {

fprintf(stderr,"Blad odczytu liczby procesow czekajacych na podniesienie semafora",strerror(errno));

exit(-5);

}

else

printf("Liczba procesow czekajacych na podniesienie semafora: %d\n", i);

}

int main(int argc, char* argv[])

{

if(argc < 2) {

fprintf(stderr,"Za malo argumentow\nwywolaj program_glowny liczba_sk\n");

exit(1);

}

int liczba_sk;

//kontrola przekazanych argumentow do programu

if((liczba_sk = strtol(argv[1],NULL,10))<=0) {

fprintf(stderr,"Argument musi byc liczba dodatnia\n");

exit(1);

}

//tworzenie klucza

key_t klucz;

if(! (klucz = ftok(".",'A'))){

fprintf(stderr,"Blad tworzenia klucza /program_potomny");

exit(2);

}

//uzyskanie dostepu do semafora

if((id_semafor = semget(klucz, 1, 0600 ))==-1){

fprintf(stderr,"Blad uzyskania dostepu do semafora /program_potomny\n");

exit(3);

}

else

printf("Proces %d uzyskal dostep do semafora\n", getpid());

//dzialanie na semaforze

int i;

for(i=1;i<=liczba_sk; i++){

opusc_semafor();

printf("Sekcja krytyczna procesu: %d\n",getpid());

liczba_procesow_czekajacych(); //wypisanie liczby procesow czekajacych na

podnies_semafor();

}

return 0;

}

//sekcja krytyczna to to co wykonuje się od opuszczenia semafora do podniesienia... czyli wszystko to, co na żółto :)


Wyszukiwarka

Podobne podstrony:
3 Stateczność prętów prostych, Postaci utraty stateczności, określanie siły krytycznej ppt
23 sekcja
SEKCJA NARZĄDÓW JAMY BRZUSZNEJ
Bierdiajew i filozofia krytyczna
O doświadczalnym wyznaczaniu nośności krytycznej płyt na modelach obarczonych imperfekcjami geome
SEKCJA B2, Dokumenty MON, Album sprzętu bojowego
J Pedagogika krytyczna, APS, KPW- Agnieszka Zamarian
Hipoglikemia pogarsza rokowanie pacjentów w stanie krytycznym, MEDYCYNA, RATOWNICTWO MEDYCZNE, BLS,
Abstrakt, bezpieczeństwo, Infrastruktura krytyczna
Najwybitniejsi krytycy literaccy dwudziestolecia międzywojennego, Dwudziestolecie Międzywojenne, Opr
temp krytyczna, TRANSPORT PWR, STUDIA, SEMESTR II, FIZYKA, fizyka-wyklad, zagadnienia opracowane, za
PEDAGOGIKA KRYTYCZNA, UKW, pedagogika, kierunki
Wizualizacja Przeplywu – Krytyczna Liczba Reynoldsa
SPRAWOZDANIE Oznaczanie krytycznego stężenia micelarnego
Wys pikiet sekcjaI

więcej podobnych podstron