TAD Semaforo y pthread
Publicado por Ancaragon (5 intervenciones) el 26/08/2007 17:52:31
Hola mi duda es la siguiente. Estoy tratando de implementar el sencillo TAD semaforo utilizando unicamente la libreria pthread.
#include "Semaforo.h"
void init(semaforo_t * s,int valor){
s->value = valor;
}
void wait(semaforo_t * s){
pthread_mutex_lock(&s->mutex);
s->value = s->value - 1;
if(s->value < 0){
pthread_cond_wait(&s->bloqueo,&s->mutex);
}
pthread_mutex_unlock(&s->mutex);
}
void signal(semaforo_t * s){
pthread_mutex_lock(&s->mutex);
s->value = s->value + 1;
if(s->value <= 0){
pthread_cond_signal(&s->bloqueo);
}
pthread_mutex_unlock(&s->mutex);
}
Creo haberlo conseguido, pero las variables de condicion (pthread_cond_...) me crean una duda en su operacion wait (pthread_cond_wait(&cond,&mutex) ) pq dice que libera el mutex entonces en ese momento podria entrar otra hebra en la operacion wait del semaforo y tocar el valor del semaforo y eso creo q podruciria inconsistencias...nose si me explico.
Saludos y Gracias
#include "Semaforo.h"
void init(semaforo_t * s,int valor){
s->value = valor;
}
void wait(semaforo_t * s){
pthread_mutex_lock(&s->mutex);
s->value = s->value - 1;
if(s->value < 0){
pthread_cond_wait(&s->bloqueo,&s->mutex);
}
pthread_mutex_unlock(&s->mutex);
}
void signal(semaforo_t * s){
pthread_mutex_lock(&s->mutex);
s->value = s->value + 1;
if(s->value <= 0){
pthread_cond_signal(&s->bloqueo);
}
pthread_mutex_unlock(&s->mutex);
}
Creo haberlo conseguido, pero las variables de condicion (pthread_cond_...) me crean una duda en su operacion wait (pthread_cond_wait(&cond,&mutex) ) pq dice que libera el mutex entonces en ese momento podria entrar otra hebra en la operacion wait del semaforo y tocar el valor del semaforo y eso creo q podruciria inconsistencias...nose si me explico.
Saludos y Gracias
Valora esta pregunta


0