Diferencia entre revisiones de «Cerrojos»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(esbozo implementación)
 
(esbozo implementación)
Línea 12: Línea 12:
 
Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.
 
Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.
  
<source code="c">
+
<source lang="c">
 
int cerrojo = 0;
 
int cerrojo = 0;
  

Revisión del 09:49 30 mar 2011

Esto es un esbozo.

while(cerrojo != 0);
cerrojo = 1;
...
cerrojo = 0;

Esto es problemático.

Podemos implementar cerrojos mediante instrucciones especiales de comprobación y puesta a 0 y 1.

int cerrojo = 0;

void lock() {
    while (__sync_lock_test_and_set(&cerrojo, 1));
}

void unlock() {
    __sync_lock_release(&cerrojo);
}

http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal