Ragazzi,
ho realizzato il seguente programma:
----
Implementare 3 thread lettori, 2 thread scrittori che agiscono su un file condiviso. Gli elementi scritti/letti sono costituiti da:
- TID dello scrittore
- numero progressivo di scrittura autonomo per ogni scrittore
Si hanno le seguenti specifiche:
- le attività di srittura indipendenti (fuori dalla sezione critica) devono durare 1 sec;
- le attività di lettura indipendenti (fuori dalla sezione critica) dureranno 2 sec. Viene letto un elemento alla volta.
- ogni volta che uno scrittore si accorge di aver scritto 10 elementi, cancella metà degli elementi presenti sul file.
Stampare:
- le attività indipendenti di creazione dell'elemento da parte dellos scrittore;
- attività di lettura indipendente da parte del lettore, che consiste nlla stampa a video di identificatore dl lettore e dei campi dell'elemento letto. */
----
Al momento dell'esecuzione mi da errore di Segmentation Fault...come mai? Grazie!codice:#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <semaphore.h> #define NL 3 #define NS 2 pthread_mutex_t mutex; pthread_mutex_t mutex_scrittore; //mutex che sblocca lo scrittore int num_lettori; //variabile che conta i lettori //STRUTTURA typedef struct{ int TID; int cont; } elemento; FILE *file_lettori; FILE *file_scrittore; int contatore; int cont; //SCRITTORE: void *scrittore (int i){ elemento elem; pthread_t TID; TID = pthread_self (); while (1){ pthread_mutex_lock (&mutex_scrittore); elem.TID = TID; elem.cont = cont; fwrite (&elem, sizeof (elemento), 1, file_scrittore); printf ("%d", elem.cont); pthread_mutex_unlock (&mutex_scrittore); } } //LETTORE: void *lettore (int i){ elemento elem; while (1){ pthread_mutex_lock (&mutex); num_lettori ++; if (num_lettori == 1) pthread_mutex_lock (&mutex_scrittore); fread (&elem, sizeof (elemento), 1, file_lettori); printf ("%d", elem.cont); pthread_mutex_lock (&mutex); num_lettori --; if (num_lettori == 0) pthread_mutex_unlock (&mutex_scrittore); pthread_mutex_unlock (&mutex); } sleep (3); } int main () { pthread_t lett[NL]; pthread_t scritt[NS]; int i; pthread_mutex_init (&mutex , NULL); pthread_mutex_init (&mutex_scrittore, NULL); num_lettori = 0; for (i=0; i<NS; i++) pthread_create (&scritt[i], NULL, (void *) scrittore, (void*) i); for (i=0; i<NL; i++) pthread_create (&lett[i], NULL, (void *) lettore, (void*) i); pthread_exit (NULL); }![]()


Rispondi quotando
