Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <sys/types.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <time.h>
- #include <errno.h>
- #include <pthread.h>
- #include <fcntl.h>
- #include <sys/stat.h>
- #include <semaphore.h>
- #include <unistd.h>
- /* widelce */
- sem_t widelec_1;
- sem_t widelec_2;
- sem_t widelec_3;
- sem_t widelec_4;
- sem_t widelec_5;
- sem_t prt;
- /* uczta filozofow */
- void *Jedzenie(void *arg)
- {
- int j;
- int porcja_nr;
- int Filozof_nr = *((int *) arg);
- for(j=0;j<20;j++)
- {
- /*pierwszy filozof */
- if(Filozof_nr==0)
- {
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 1 i mysle po raz %d\n",porcja_nr);
- sem_post(&prt);
- sem_wait(&widelec_1);
- sem_wait(&widelec_2);
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 1 i jem po raz %d.\n",porcja_nr);
- sem_post(&prt);
- sem_post(&widelec_1);
- sem_post(&widelec_2);
- }
- /*drugi filozof */
- if(Filozof_nr==1)
- {
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 2 i mysle po raz %d\n",porcja_nr);
- sem_post(&prt);
- sem_wait(&widelec_3);
- sem_wait(&widelec_2);
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 2 i jem po raz %d.\n",porcja_nr);
- sem_post(&prt);
- sem_post(&widelec_2);
- sem_post(&widelec_3);
- }
- /* trzeci filozof */
- if(Filozof_nr==2)
- {
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 3 i mysle po raz %d\n",porcja_nr);
- sem_post(&prt);
- sem_wait(&widelec_3);
- sem_wait(&widelec_4);
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 3 i jem po raz %d.\n",porcja_nr);
- sem_post(&prt);
- sem_post(&widelec_4);
- sem_post(&widelec_3);
- }
- /* czwarty filozof */
- if(Filozof_nr==3)
- {
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 4 i mysle po raz %d\n",porcja_nr);
- sem_post(&prt);
- sem_wait(&widelec_5);
- sem_wait(&widelec_4);
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 4 i jem po raz %d.\n",porcja_nr);
- sem_post(&prt);
- sem_post(&widelec_4);
- sem_post(&widelec_5);
- }
- /* piaty filozof */
- if(Filozof_nr==4)
- {
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 5 i mysle po raz %d\n",porcja_nr);
- sem_post(&prt);
- sem_wait(&widelec_5);
- sem_wait(&widelec_1);
- sem_wait(&prt);
- porcja_nr=j+1;
- printf("Jestem filozof 5 i jem po raz %d.\n",porcja_nr);
- sem_post(&prt);
- sem_post(&widelec_1);
- sem_post(&widelec_5);
- }
- }
- return NULL;
- }
- int main(int argc, char **argv)
- {
- int i;
- pthread_t watek[5];
- sem_init (&widelec_1, 0, 1);
- sem_init (&widelec_2, 0, 1);
- sem_init (&widelec_3, 0, 1);
- sem_init (&widelec_4, 0, 1);
- sem_init (&widelec_5, 0, 1);
- sem_init (&prt, 0, 1);
- int watek_nr [5];
- /* tworzenie watkow */
- for (i = 0; i < 5; i++)
- {
- watek_nr [i] = i;
- pthread_create (&watek [i], NULL, Jedzenie, (void *) &watek_nr [i]);
- }
- for (i = 0; i < 10; i++)
- {
- pthread_join (watek [i], NULL);
- }
- /* niszczenie semaphorow */
- sem_destroy (&widelec_1);
- sem_destroy (&widelec_2);
- sem_destroy (&widelec_3);
- sem_destroy (&widelec_4);
- sem_destroy (&widelec_5);
- exit (0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement