C/Visual C - Problema con MUTEX.

   
Vista:
Imágen de perfil de Alberto

Problema con MUTEX.

Publicado por Alberto (3 intervenciones) el 25/02/2018 22:00:50
Estoy practicando con el uso de mutex desde el ejemplo que se me daba en una web. Despues de eliminar el codigo redundante y quedarme solo con las funciones correspondientes al mutex, observo que no cumplen su funcion de exclusion mutua, y en thread creado queda en un estado bloqueado de forma permanente. Adjunto el fragmento a ver que opinan. Un saludo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <pthread.h>
 
 
void *funcionThread (void *data);
int buffer[128];
pthread_mutex_t mutexBuffer ;
 
 
 
 
int main(int argc, char *argv[])
{
 
	pthread_t idHilo;
        pthread_mutex_init(&mutexBuffer, NULL);
        pthread_create (&idHilo, NULL, funcionThread, NULL);
 
 
 
 
	while(1)
	{
 
 
 
		pthread_mutex_lock(&mutexBuffer);
 
 
		printf("Nombre: ");
		scanf("%s^\n", buffer);
 
 
		pthread_mutex_unlock(&mutexBuffer);
 
 
 
	}
 
 
}
 
 
 
 
void *funcionThread (void *data)
{
 
		while(1)
		{
 
                   pthread_mutex_lock(&mutexBuffer);
 
		   printf("Nombre: %s\n", buffer);
 
		   pthread_mutex_unlock(&mutexBuffer);
 
		}
 
 
 
}
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

Problema con MUTEX.

Publicado por Andrés (7 intervenciones) el 26/02/2018 00:04:19
Lo que pasa es que un thread esta muriendo de inanición (starvation), lo que tienes es un buffer (mal declarado por cierto), entonces un thread obtiene el "lock", lo libera pero no le da tiempo al otro thread de obtenerlo y se muere :/
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
Imágen de perfil de Alberto

Problema con MUTEX.

Publicado por Alberto (3 intervenciones) el 26/02/2018 02:02:04
Si, el buffer es de tipo char. Respecto a lo que comentas, si habia notado comportamientos distintos añadiendo "sleeps", cambiando la prioridad entre el proceso principal y el hilo creado o incluso observando el proceso mediante strace. ¿Que tipo de soluciones de aplican en situaciones de este tipo?. Intentare no obstante documentarme sobre lo que apuntas.

Un saludo Andres y muchas gracias.
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

Problema con MUTEX.

Publicado por Andrés (7 intervenciones) el 26/02/2018 06:02:51
Mecanismos de sincronización: semáforos, mutexes, cerrojos, variables de condición, por cierto, creo que al inicio era deadlock, no starvation, en fin.
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
Imágen de perfil de Alberto

Problema con MUTEX.

Publicado por Alberto (3 intervenciones) el 26/02/2018 01:51:36
Como dato adicional, decir que estoy usando Slackware sobre Vmware.
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

Problema con MUTEX.

Publicado por Tom (561 intervenciones) el 26/02/2018 09:43:31
1.- No sabes cual de los dos hilos de ejecución va a comenzar a ejecutarse primero.
2.- Los mutex (mutual exclusion) están diseñados para que dos hilos no ejecuten la misma rutina simultáneamente.

Por esto, aunque podrías conseguir lo que pretendes usando mutexes te recomendaría que usases un semáforo en su lugar.
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
Revisar política de publicidad