Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/wait.h>
- #include "sem.h"
- #define N_NIM 5
- void nim( int i ) ;
- int sem1;
- int sem2;
- int *counter;
- int nfilhos;
- void barreira() {
- int i;
- P(sem1);
- (*counter)++;
- if ((*counter) < nfilhos) {
- V(sem1);
- P(sem2);
- P(sem1);
- }
- else {
- for (i=1; i<nfilhos; i++)
- V(sem2);
- (*counter) = 0;
- }
- V(sem1);
- }
- int main(int argc, char **argv)
- {
- if( argc != 2 )
- { printf( "uso %s num_filhos\n", argv[0] );
- exit(1);
- }
- nfilhos = atoi(argv[1]);
- sem1 = createSem (1);
- sem2 = createSem (0);
- createSharedArea();
- attachArea();
- int shm_id;
- int i;
- shm_id = createSharedArea(4); //4 pq é o tamanho de um inteiro
- counter = (int*)attachArea(shm_id);
- for( i = 0; i < nfilhos; i++ )
- if( fork() == 0 )
- {
- nim(i);
- exit(0);
- }
- for( i = 0; i < nfilhos; i++ ){
- wait(NULL);
- }
- deleteSem(sem1);
- deleteSem(sem2);
- deleteSharedArea();
- printf( "fim!\n" );
- return 0;
- }
- void nim(int i)
- {
- int pid = getpid();
- int n;
- //o P tambem pode ser posto aqui
- for( n = 1; n <= N_NIM; n++ )
- {
- printf("Filho %d - <%d> Mensagem %d\n", i, pid, n );
- barreira();
- // para multi processadores podemos retirar a instrução seguinte
- usleep(100);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement