鏡像指示位,緩衝區的長度如果是n,邏輯地址空間則為0至n-1;那么,規定n至2n-1為鏡像邏輯地址空間。
本策略規定讀寫指針的地址空間為0至2n-1,其中低半部門對應於常規的邏輯地址空間,高半部分對應於鏡像邏輯地址空間。當指針值大於等於2n時,使其折返(wrapped)到ptr-2n。使用一位表示寫指針或讀指針是否進入了虛擬的鏡像存儲區:置位表示進入,不置位表示沒進入還在基本存儲區。
500px
在讀寫指針的值相同情況下,如果二者的指示位相同,說明緩衝區為空;如果二者的指示位不同,說明緩衝區為滿。這種方法優點是測試緩衝區滿/空很簡單;不需要做取餘數操作;讀寫執行緒可以分別設計專用算法策略,能實現精緻的並發控制。缺點是讀寫指針各需要額外的一位作為指示位。
如果緩衝區長度是2的冪,則本方法可以省略鏡像指示位。如果讀寫指針的值相等,則緩衝區為空;如果讀寫指針相差n,則緩衝區為滿,這可以用條件表達式(寫指針==(讀指針異或緩衝區長度))來判斷。
500px
在讀寫指針的值相同情況下,如果二者的指示位相同,說明緩衝區為空;如果二者的指示位不同,說明緩衝區為滿。這種方法優點是測試緩衝區滿/空很簡單;不需要做取餘數操作;讀寫執行緒可以分別設計專用算法策略,能實現精緻的並發控制。缺點是讀寫指針各需要額外的一位作為指示位。
如果緩衝區長度是2的冪,則本方法可以省略鏡像指示位。如果讀寫指針的值相等,則緩衝區為空;如果讀寫指針相差n,則緩衝區為滿,這可以用條件表達式(寫指針==(讀指針異或緩衝區長度))來判斷。