Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Concurrencia con pthreads

Estas en el tema de Concurrencia con pthreads en el foro de C/C++ en Foros del Web. Buenas, estoy programando una aplicación multihilo en C, en la que los distintos hilos sólo comparten ciertas variables booleanas. El acceso a ellas es frecuente ...
  #1 (permalink)  
Antiguo 20/09/2007, 07:00
 
Fecha de Ingreso: septiembre-2007
Mensajes: 5
Antigüedad: 17 años, 3 meses
Puntos: 0
Concurrencia con pthreads

Buenas,

estoy programando una aplicación multihilo en C, en la que los distintos hilos sólo comparten ciertas variables booleanas. El acceso a ellas es frecuente en todos los hilos, por lo que estoy dudando en introducir mutex para acceder a ellas (me resisto por lo que esto puede afear el código). ¿Es realmente necesario? ¿Se puede considerar atomicidad en la lectura/escritura de variables booleanas?

Un saludo y gracias!
  #2 (permalink)  
Antiguo 21/09/2007, 02:36
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Concurrencia con pthreads

Es necesario, no tiene importancia que la variable sea de un solo byte. Un caso simple:

int x = globBool++;

HILO A: mov eax, byte ptr [globBool] ;eax=2
HILO A: inc eax ;eax=3
HILO B: mov eax, byte ptr [globBool] ;eax=2
HILO B: inc eax ;eax=3
HILO B: mov byte ptr [globBool], eax ;eax=3
HILO A: mov byte ptr [globBool], eax ;eax=3


Si el valor inicial era 2, tenemos que el valor final de globBool es 3 cuando en realidad deberia ser 4 cuando dos hilos intentaron incrementarlo.

Con un mutex lo que pasaria es esto:

HILO A: grabMutex
HILO A: mov eax, byte ptr [globBool] ;eax=2
HILO A: inc eax ;eax=3
HILO B: waitForMutex
HILO A: mov byte ptr [globBool], eax ;eax=3
HILO A: releaseMutex
HILO B: grabMutex
HILO B: mov eax, byte ptr [globBool] ;eax=3
HILO B: inc eax ;eax=4
HILO B: mov byte ptr [globBool], eax ;eax=4
HILO B: releaseMutex


Con lo cual globBool tendria el valor correcto.

Otra cosa seria que tuvieras funciones atomicas disponibles, yo trabajo en Windows y las hay (InterlockedIncrement por ejemplo).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:30.