Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] problema lettori scrittori pthread/mutex

    ciao ragazzi avrei un problema.non riesco a comprendere una parte di codice.chi me la spiega???


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <limits.h>
    #include <pthread.h>
    #include <semaphore.h>
    #define NR 4
    #define NW 3
     
    pthread_mutex_t mutex, mutex_data;
    typedef struct{char *scrittore; int numero; int info;
                   }dataobject;
    dataobject data = {"***", -1};
    int n, reader_count=0;
    
    
    
    void * writer(void *x){
       int n, i=0;
       int k, number=*((int*)x);
       printf("scrittore %d creato \n\n",number);
       for (;;) {
    srand((unsigned int) time(NULL));
            n = rand() % 10+ 1; i++;
            printf("scrittore: %d \n", number);
            printf("genera il dato  %d\n", i);
            pthread_mutex_lock(&mutex_data);
            data.scrittore = "writer";
            data.numero = number; data.info=i;
            printf("scrittore: %d\n",number);
            printf("scrive il dato\n");
            printf("%s %d numero %d\n", data.scrittore,
                    data.numero, data.info);
            pthread_mutex_unlock(&mutex_data);
            sleep(n);
       }
    }
    
    void * reader(void *x){
       int k, number=*((int*)x);
       dataobject local_data_image;
       printf("lettore  %d  creato\n\n", number);
       for (;;) {
          srand((unsigned int) time(NULL));
          n = rand() % 4 + 1;
          pthread_mutex_lock(&mutex);   // NON CAPISCO QUESTO PEZZO DA QUI FINO A
          if(++reader_count==1)
          pthread_mutex_lock(&mutex_data);
         pthread_mutex_unlock(&mutex); // QUI
     
    
          local_data_image=data;
          printf(“lettore %d : \n", number);
          printf("leggo %d scritto da %s %d\n", data.info, 
                 data.scrittore, data.numero);
          pthread_mutex_lock(&mutex);
    if(--reader_count==0)
    pthread_mutex_unlock(&mutex_data);
            //se non ci sono altri lettori gli scrittori possono
    accedere il dato
           pthread_mutex_unlock(&mutex);
     
    // noncritical region
           usleep(n);
           printf("lettore %d : \n", number);
           printf("locale %d from \n", 
                   local_data_image.info, 
                   local_data_image.numero);
    sleep(n);
    }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    In generale quando c'è da accedere ad una variabile condivisa tra più thread (e reader_count lo è) si tende a farlo acquisendo il lock su un mutex per poi rilasciarlo ad accesso avvenuto, ed è quello che avviene con "mutex".
    Il senso generale del codice però non è chiaro. Perché reader_count viene incrementato ad ogni iterazione di ogni singolo thread lettore? Avrebbe più senso incrementarlo una volta quando il thread viene creato e decrementarlo quando il thread termina la sua esecuzione, al di fuori del ciclo, cosa peraltro in tal caso impossibile visto che il ciclo è potenzialmente infinito.
    Dove hai trovato questo codice?
    every day above ground is a good one

  3. #3
    questo codice ci è stato presentato così come te l'ho scritto dalla mia professoressa di sistemi operativi.l'ho preso e l'ho copiato dalle sue slide.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.