C/Visual C - TAD Semaforo y pthread

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:TAD Semaforo y pthread

Publicado por Tom (619 intervenciones) el 27/08/2007 08:29:27
Hay que leerlo todo :-) También dice en el mismo sitio que tras la finalización correcta de pthread_cond_wait (o la cancelación del thread), mutex sigue bloqueado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar