# Synchronization Hardware ## Hardware Support - CS問題發生的原因是更改shared data的過程可能被中斷 - 如果在CS,disable interrupts - 在多processor的機器上行不通 - ==clock interrupts==不能fire in any machine - HW support解法:atomic指令 - atomic:原子的,不能被分開、中斷的單元 - 例子 1. TestAndSet(var) 2. Swap(a,b) ### Atomic TestAndSet() 執行==atomically==,回傳lock的值,一律將lock設為TRUE ```C boolean TestAndSet (bool &lock) { bool value = lock ; lock = TRUE ; return value ; } ``` - Mutual exclusion? Yes - Progress? Yes - ==Bounded-Wait? No!== ![](https://i.imgur.com/1XwdpaJ.png) ### Atomic Swap() - 想法:enter CS if lock==false - key可表示是否想進去 - 多個procress也可以行得通 - ==搶到lock==的人才能進去 - Shared data: boolean lock; //initially lock = FALSE; ![](https://i.imgur.com/fsmHFHs.png) - Mutual exclusion? Yes - Progress? Yes - ==Bounded-Wait? No!==