PDA

Visualizza la versione completa : [C] Realizzare un semaforo (Linux, POSIX)


thesalien
01-03-2007, 18:11
Salve a tutti, vorrei sapere se sia possibile distruggere e ricreare un semaforo oppure reinizializzare il semaforo ai valori di default.

Ho una cosa del genere:


sem_t vuoto, pieno;
int buffer_scrittura;
int buffer_lettura;
int buffer[DIM_BUFFER];

buffer_scrittura = 0;
buffer_lettura = 0;
sem_init(&vuoto, 0, DIM_BUFFER);
sem_init(&pieno, 0, 0);


uso questo codice per scrivere nel buffer:


sem_wait(&vuoto);
pthread_mutex_lock(&mutex_buffer);
buffer[buffer_scrittura] = dato;
buffer_scrittura= (buffer_scrittura + 1) % DIM_BUFFER;
pthread_mutex_unlock(&mutex_buffer);
sem_post(&pieno);



uso questo invece per leggere dal buffer:


sem_wait(&pieno);
pthread_mutex_lock(&mutex_buffer);
valore_letto=buffer[buffer_lettura];
buffer_lettura= (buffer_lettura + 1) % DIM_BUFFER;
pthread_mutex_unlock(&mutex_buffer);
sem_post(&vuoto);


io vorrei svuotare il buffer e far in modo che i semafori tornino ai valori di default.. cioè fare una cosa del genere:
buffer_scrittura = 0;
buffer_lettura = 0;
sem_init(&vuoto, 0, DIM_BUFFER);
sem_init(&pieno, 0, 0);

sapete se è possibile??

programmerscafe
01-03-2007, 22:15
Ciao, non ho capito perche' esegui

sem_init(&vuoto, 0, DIM_BUFFER);

il terzo parametro serve a indicare quanti processi possono entrare nel semaforo, sei sicuro che DIM_BUFFER debba stare li'?

In ogni caso se non ci sono processi all'interno di un semaforo, il semaforo mantiene i valori che gli hai impostato alla creazione per cui non c'e' alcuna ragione (che mi venga in mente al momento) per doverlo "resettare".

Ciao

thesalien
02-03-2007, 00:13
il terzo parametro non serve a inizializzare il semaforo ad un valore preciso?

comunque grazie lo stesso ma sono riuscito a risolvere evitando di fare tutto ciò :)

Loading