Advertisement
d1cor

posix_semaphore.c

Aug 30th, 2017
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.57 KB | None | 0 0
  1. /*******************************************
  2. * Author     : Diego Cordoba / @d1cor      *
  3. * Purpose    : juncotic.com  / um.edu.ar   *
  4. *******************************************/
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <unistd.h>
  9. #include <string.h>
  10. #include <fcntl.h>
  11. #include <sys/shm.h>
  12. #include <sys/stat.h>
  13. #include <sys/mman.h>
  14. #include <sys/types.h>
  15. #include <errno.h>
  16. #include <semaphore.h>
  17. #include <wait.h>
  18.  
  19.  
  20. #define SEM_NAME "/sema"
  21.  
  22. int main(void){
  23.     char comando[10];
  24.     int i;
  25.     int valor;
  26.     sem_t *mutex;
  27.  
  28.  
  29.  
  30.  
  31.     sem_unlink(SEM_NAME);
  32.     mutex = sem_open(SEM_NAME, O_CREAT, 0666, 1);
  33.  
  34.     sem_getvalue(mutex, &valor); printf("Valor actual: %d\n", valor);
  35.  
  36.  
  37.     if(fork()==0){
  38.         sleep(1);
  39.         for(i=0;i<3;i++){
  40.             sem_wait(mutex);
  41.             sem_getvalue(mutex, &valor); printf("Valor actual: %d (hijo adentro)\n", valor);
  42.  
  43.             printf("Hijo usando recurso...\n");
  44.             sleep(1);
  45.             printf("Hijo liberando recurso \n\n");
  46.            
  47.             sem_post(mutex);
  48.             sem_getvalue(mutex, &valor); printf("Valor actual: %d (hijo saliendo)\n", valor);
  49.             usleep(100-i*10);
  50.         }
  51.         return (0);
  52.     }
  53.     for(i=0;i<3;i++){
  54.         sem_wait(mutex);
  55.         sem_getvalue(mutex, &valor); printf("Valor actual: %d (padre adentro)\n", valor);
  56.    
  57.         printf("Padre usando recurso...\n");
  58.         sleep(2);
  59.         printf("Padre liberando recurso \n\n");
  60.        
  61.         sem_post(mutex);
  62.         sem_getvalue(mutex, &valor); printf("Valor actual: %d (padre saliendo)\n", valor);
  63.         usleep(100+i*10);
  64.     }
  65.     wait(NULL);
  66.     sem_close(mutex);
  67.     sem_unlink(SEM_NAME);
  68.  
  69.     return (0);
  70. }
  71.  
  72. https://tmate.io/t/ro-qJeJffDifZDYOVP2RDhZla6Hi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement