- Es posible tener soluciones más sencillas al problema de la
sección crítica con apoyo de hardware.
- Una solución es el apagar interrupciones. Desventajas:
- Difícil para implementar en los multiprocesadores
- ¶ El proceso puede quedar demasiado largo en la SC. Esto no
es un problema para bibliotecas de threads a nivel de usuario.
- Las máquinas modernas tienen instrucciones atómicas que se
pueden usar para el problema de SC.
- Test-and-Set.
function Test-and-Set (var target: boolean): boolean;
begin
Test-and-Set := target;
target := true
end;
- Swap.
procedure Swap (var a,b: boolean);
var temp: boolean;
begin
temp := a;
a := b;
b := temp;
end;
- ¶ Exclusión mutua. [Interrogación]
(* lock iniciado a falso *)
while Test-and-Set(lock) do no-op;
<SC>
lock := false;
No soluciona la espera limitada. Para ésa necesitamos usar un
array para todos los procesos que esperan y chequearlo durante la
salida de la SC.