Primitivas Básicas de Sincronização (cont.)
Otimização:
- Num multiprocessador com caches coerentes, cada chamada a test-and-set implica em um write: alto tráfego, potencialmente, se há muitos processadores
- Outra possível implementação de lock:
lock: R1 = mem(m)
if (R1?0) goto lock
R1 = test-and-set(m)
if (R1?0) goto lock
- Durante a espera, há apenas reads
- Writes somente ocorrem quando var-lock=livre
- Se após um write o processador não ganhar o lock, ele volta ao loop onde faz apenas reads (spinlock)