21/09/2007, 02:36
|
| | | 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 |