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. */
----
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);
}
Al momento dell'esecuzione mi da errore di Segmentation Fault...come mai? Grazie!