同步互斥
1.原子操作
2.臨界區概述
? 臨界區:進程中訪問臨界資源的一段需要互斥執行的代碼。
? 進入區:檢查可否進入臨界區的一段代碼,如可進入,設置相應“正在訪問臨界區”標志。
? 退出區:清除“正在訪問臨界區”標志。
3.臨界區訪問規則
? 空閑則入:沒有進程在臨界區時,任何進程可進入。
? 忙則等待:有進程在臨界區時,其他進程均不能進入臨界區。
? 有限等待:等待進入臨界區的進程不能無限期等待。
? 讓權等待(可選):不能進入臨界區的進程,應釋放CPU(如轉換到阻塞狀態)。?
4.臨界區的實現方法:
不同的臨界區實現機制的比較,根據其性能(并發級別)來衡量。
?1)禁用中斷:
進入臨界區時,禁止所有中斷。退出臨界區時,使能所有中斷。這樣沒有并發,進程可以獨享資源。
? ??
? ??
2)基于軟件的實現方法:
用相應的算法實現。需要兩個進程間的共享數據項,比較復雜,而且是忙等待。
? ? 算法中,turn指輪到某個進程進入臨界區,flag[i]指i進程想進入臨界區,只有當turn == i 且flag[i]為true 同時成立時,才會進入臨界區。
? ??
? ??
? ??
?3)更高級的抽象方法
硬件提供了一些同步原語,如中斷禁用,原子操作指令等,操作系統利用這些同步原語來構建更高級的編程抽象來簡化進程同步,如鎖,信號量等。
? ?原子操作指令:
? ??
? ??
? ?
? ??
? ??
? 4)三種方式的比較
? ??
? ??
?
轉載于:https://www.cnblogs.com/kkkkkk/p/5541052.html
總結
- 上一篇: 用原生JavaScript实现图片瀑布流
- 下一篇: C++ 中类的内存布局