Diferencia entre revisiones de «Cerrojos»
De Wiki de Sistemas Operativos
(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 | + | <source lang="c"> |
int cerrojo = 0; | int cerrojo = 0; | ||
Revisión del 08: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