什麼是信號量?通過對這個量的訪問和修改,讓大家有序推進 1. 共同修改信號量引出的問題 2. 競爭條件 3. 解決競爭條件的直觀想法 4. 臨界區 臨界區:臨界區是指進程中的一段需要訪問共用資源並且另一個進程處於相應代碼區域時便不會被執行的代碼區域 互斥:當一個進程處於臨界區並訪問共用資源時,沒有其 ...
什麼是信號量?通過對這個量的訪問和修改,讓大家有序推進
1. 共同修改信號量引出的問題
2. 競爭條件
3. 解決競爭條件的直觀想法
4. 臨界區
臨界區:臨界區是指進程中的一段需要訪問共用資源並且另一個進程處於相應代碼區域時便不會被執行的代碼區域
互斥:當一個進程處於臨界區並訪問共用資源時,沒有其他進程會處於臨界區並且訪問任何相同的共用資源
臨界區代碼的保護原則
5. 臨界區嘗試一:輪換法
如果turn=0,那就進入執行,turn!=0,那就空轉
6. 臨界區的嘗試二:標記法
代碼實現:
p0進入先打標記,如果發現p1也打標記了,那麼就空轉,等p1執行完flag[1] = false , p0再進入執行,
標記法引發的問題:
7. 臨界區的嘗試三:非對稱標記
Peterson演算法
Peterson演算法的正確性
8. 保護臨界區方法一
麵包店演算法
麵包店演算法的正確性:
9. 保護臨界區方法二
硬體實現:開關中斷
僅限用於但處理器
cli(); 關中斷
sti(); 開中斷
但多cpu不好使:因為當前的cpu只能控制當前的進程
10. 保護臨界區方法三
硬體原子指令法
單處理器和多處理器均可
就是類似於鎖的那種,但是這個是一次執行完畢,上鎖過程不會被打斷