Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <unistd.h>
- #include <signal.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/shm.h>
- int Id;
- typedef struct zs
- {
- int pravo;
- int zastavica[1];
- }Zs;
- Zs *seg;
- void ulazKriticniOdsjecak(int i, int j)
- {
- seg->zastavica[i] = 1;
- while(seg->zastavica[j] != 0)
- {
- if((seg->pravo) == j)
- {
- seg->zastavica[i] = 0;
- while((seg->pravo) == j)
- {
- ;
- }
- }
- seg->zastavica[i] = 1;
- }
- }
- void izlazKriticniOdsjecak(int i, int j)
- {
- seg->pravo = j;
- seg->zastavica[i] = 0;
- }
- void ispisi(int i, int j, int k)
- {
- printf("Proces: %d, K.O. br: %d (%d/5)\n",i+1, 6 - k, j);
- }
- void proces(int i){
- int j,k,c;
- k = c = 5;
- if(i == 0)
- {
- while(k)
- {
- ulazKriticniOdsjecak(i,1);
- for(j=1; j<=5; j++)
- {
- ispisi(i, j, k);
- sleep(1);
- }
- izlazKriticniOdsjecak(i,1);
- k--;
- }
- }
- else if(i == 1)
- {
- while(c)
- {
- ulazKriticniOdsjecak(i,0);
- for(j=1; j<=5; j++)
- {
- ispisi(i, j, c);
- sleep(1);
- }
- izlazKriticniOdsjecak(i,0);
- c--;
- }
- }
- }
- void obrisi(int sig)
- {
- (void) shmdt((char*) seg);
- (void) shmctl(Id, IPC_RMID, NULL);
- exit(0);
- }
- int main()
- {
- //stvaramo novi segment
- Id = shmget(IPC_PRIVATE, sizeof(int) * 100, 0600);
- if(Id == -1)
- {
- printf("Greska! Nije uspijelo zauzimanje memorije!");
- exit(1);
- }
- //pridruzujemo zajednicki segment var seg
- seg = shmat(Id, NULL, 0);
- sigset(SIGINT, obrisi);
- int i;
- for(i=0; i<2; i++)
- {
- switch(fork())
- {
- case 0:
- proces(i);
- exit(0);
- case -1:
- printf("Proces ne moze biti stvoren!");
- exit(0);
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment