Implementing Lock
Interrupt Disable
simple way to implement sync.

Queuing Lock
- acq할때 본인을 ready에서 지우고 waiter에 넣는다
- rel할때 waiting에서 지우고 ready로 다시 넣어주어 lock이 구현된다.
- 잘보면 value를 FREE로 만들지 않는다.
- 이래야만 acquire 기다리고 있던 스레드가 lock을 유한번의 release 내에 얻을 수 있기 때문이다.
- 그렇지 않으면 계속 다른 스레드가 acquire하여 starvation이 생길 수 있다.
- interrupt disable을 mutex처럼 쓴다.

Lock in multi-processor
Atomic operation
멀티 프로세서 환경에서는 disableInterrupt 하더라도 다른 프로세서에서 실행한게 끼어들 수 있다.
따라서 하드웨어 수준의 atomic operation을 활용하여 락을 걸어줘야 한다.
- test and set instruction: 해당 주소에 1을 쓰고, 원래 값을 반환한다
Spinlock

- 초기값 FREE
- acquire
- testandset(value) :
- value = busy
- return free
- while문 탈출
- 초기값 Busy
- acquire
- testandset(value):
- value=busy
- return busy
- while문 도는 중 …
- release → value = free → acquire 끝남