diff options
| author | Fabian Montero <fabian@posixlycorrect.com> | 2023-10-04 19:24:52 -0600 |
|---|---|---|
| committer | Fabian Montero <fabian@posixlycorrect.com> | 2023-10-04 19:24:52 -0600 |
| commit | f3d40b34df954eb533cf3d1e9bce2ad3a7eaea21 (patch) | |
| tree | 17818563c9f748924e304799e591af4daaa74e63 /demo/lock.S | |
| parent | 5287cbc1371d74386299409198dd786a35395bf9 (diff) | |
comenta demo de spinlock
Diffstat (limited to '')
| -rw-r--r-- | demo/lock.S | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/demo/lock.S b/demo/lock.S index 3ec2765..120728b 100644 --- a/demo/lock.S +++ b/demo/lock.S @@ -11,13 +11,17 @@ spin_lock: orr r2, r2, #0xc0 @ Levanta I, F msr cpsr_c, r2 mov r3, #1 -1: ldrex r2, [r0] - teq r2, #0 - strexeq r2, r3, [r0] - teqeq r2, #0 - bne 1b - mov pc, lr - +1: ldrex r2, [r0] @ se carga el valor del lock + teq r2, #0 @ se revisa si el valor del lock, si es 1, se bringa al jump + strexeq r2, r3, [r0] @ trata de guardar r3 en r0, pero solo si el monitor se lo permite + teqeq r2, #0 @ revisa si en efecto se hizo el store o no + bne 1b @ regresa al inicio + mov pc, lr @ retorna de la función + @ + @ la implicación de esto es que si dos + @ cores intentan hacer accesar al mismo + @ recurso, el monitor solo va a dejar a uno + @ de ellos hacerlo .global spin_unlock spin_unlock: mov r2, #0 |
