Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/ipc.h>
- #include <sys/sem.h>
- #include <unistd.h>
- void semafor_v();
- void semafor_p();
- void task(int i);
- int semafor;
- int i;
- int main(int argc, char* argv[])
- {
- int lsk;
- semafor=(int)strtol(argv[1],NULL,10);
- printf("Semafor: %d\n",semafor);
- lsk=atoi(argv[2]);
- for(i=0; i<lsk; i++)
- {
- semafor_p(0);
- task(i);
- semafor_v(0);
- }
- return 0;
- }
- void semafor_v(int sem_num)
- {
- int zmien_sem;
- struct sembuf bufor_sem;
- bufor_sem.sem_num=sem_num;
- bufor_sem.sem_op=1;
- bufor_sem.sem_flg=SEM_UNDO;
- zmien_sem=semop(semafor, &bufor_sem, 1);
- if(zmien_sem==-1)
- {
- printf("Nie mozna otworzyc semafora\n");
- exit(EXIT_FAILURE);
- }
- else
- printf("Semafor zostal otwarty\n");
- }
- void semafor_p(int sem_num)
- {
- int zmien_sem;
- struct sembuf bufor_sem;
- bufor_sem.sem_num=sem_num;
- bufor_sem.sem_op=-1;
- bufor_sem.sem_flg=SEM_UNDO;
- zmien_sem=semop(semafor, &bufor_sem, 1);
- if(zmien_sem==-1)
- {
- // printf("Nie mozna zamknac semafora\n");
- if(errno==4)
- {
- do
- {
- zmien_sem=semop(semafor, &bufor_sem, 1);
- }while(zmien_sem==-1);
- }
- // exit(EXIT_FAILURE);
- }
- else
- printf("Semafor zostal zamkniety\n");
- }
- void task(int i)
- {
- printf("Task %d, PID: %d\n", i, getpid());
- fflush(stdout);
- sleep(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement