Diferencia entre revisiones de «Cerrojos»
De Wiki de Sistemas Operativos
(esbozo implementación) |
(esbozo (revisión)) |
||
Línea 24: | Línea 24: | ||
</source> | </source> | ||
− | http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html | + | * 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 | + | * http://stackoverflow.com/questions/1383363/is-my-spin-lock-implementation-correct-and-optimal |
Revisión del 08:50 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);
}