Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <pthread.h>
  5.  
  6. typedef struct
  7. {
  8.     int numConto;
  9.     int saldo;
  10.  
  11. }datiConto;
  12.  
  13. pthread_mutex_t bufferVuoto;          
  14. pthread_mutex_t datoPronto = PTHREAD_MUTEX_INITIALIZER;
  15.  
  16.  
  17. int gSaldo,gNumConto,gMaxUtenti;
  18.  
  19. void* produttore(void* arg)
  20. {
  21.     datiConto * d = (datiConto *)arg;
  22.    
  23.     int i;
  24.     for (i=0;i<gMaxUtenti;i++)
  25.     {
  26.        
  27.         pthread_mutex_lock(&bufferVuoto);
  28.        
  29.         gNumConto = (d+(i*sizeof(datiConto)))->numConto;
  30.         gSaldo = (d+(i*sizeof(datiConto)))->saldo;
  31.         pthread_mutex_unlock(&datoPronto);
  32.        
  33.     }
  34.     pthread_exit(0);
  35.     return NULL;
  36. }
  37.  
  38. void* consumatore(void* arg)
  39. {
  40.     int i;
  41.     for (i=0;i<gMaxUtenti;i++)
  42.     {
  43.        
  44.          pthread_mutex_init(&bufferVuoto,NULL); /*inizializzo il semaforo a libero   */
  45.         datoPronto =0;
  46.        
  47.         printf("[gSaldo]=%d [gNumConto]= %d",gSaldo,gNumConto);
  48.         pthread_mutex_unlock(&bufferVuoto);
  49.     }
  50.     pthread_exit(0);
  51.     return NULL;
  52. }
  53.  
  54.  
  55. void main()
  56. {
  57.     int i;
  58.     printf("Inserisci il numero di utenti massimo\n");
  59.     scanf("%d",&gMaxUtenti);
  60.     datiConto * d = (datiConto *)malloc(sizeof(datiConto)*gMaxUtenti);
  61.     for(i=0;i<gMaxUtenti;i++)
  62.     {
  63.         printf("Inserisci il numero conto del %d utente",i+1);
  64.         scanf("%d",&(d+(i*sizeof(datiConto)))->numConto);
  65.         printf("Inserisci il saldo del %d utente",i+1);
  66.         scanf("%d",&(d+(i*sizeof(datiConto)))->saldo);
  67.     }
  68.                                          
  69.  
  70.     pthread_t produci,consuma;
  71.     pthread_mutex_lock(&datoPronto);
  72.    
  73.     pthread_create(&produci,NULL,produttore,(void *)(d));          
  74.     pthread_create(&consuma,NULL,consumatore,NULL);        
  75.     pthread_join(consuma,NULL);
  76.     pthread_join(produci,NULL);            
  77.    
  78.  
  79.    
  80.    
  81.    
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement