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!