Cerrojos
De Wiki de Sistemas Operativos
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