「雙快取佇列」是我在一次開發任務中針對特殊場景設計出來的結構。使用場景為:傳送端持續向接收端傳送資料報——並且不理會接收端是否完成業務邏輯。由於接收端在任何情況下停止響應即可能產生資料丟失,因此無法簡單的設計一條執行緒安全佇列來對資料寫入或讀取(讀取資料時將佇列上鎖視為對寫入的停止響應)。
鑑於此,我的設計思路如下:
接收端首先向a佇列中寫入資料,然後當資料處理請求到來的時候切換到b佇列繼續寫入,之後將a佇列中的資料交給資料處理模組,處理完成以後a佇列資料清空。當下一次資料處理請求到來時,再將寫入請求切換回a佇列,並把b佇列中的資料提交給資料處理模組再清空佇列b,輪流作業。
有了思路以後,**就比較簡單了。
#include template注1:開發環境與ide分別為centos 7,netbeans 8.2class
doublearray ;
intsize_a;
intsize_b;
node*header_a;
node*header_a_cur;
node*header_b;
node*header_b_cur;
inttrigger;
public
: doublearray() : size_a(
0), size_b(0), trigger(0), header_a(0), header_a_cur(0), header_b(0), header_b_cur(0
)
intpush(t t);
std::list
& fetch(std::list&list);
};template
int doublearray::push(t t)
else
if (size_b == 0 && trigger == 1
) else
}}template
std::list
& doublearray::fetch(std::list&list)
//delete a
temp =header_a;
for (int i = 0; i < size_a; ++i)
size_a = 0
; header_a = 0
; header_a_cur = 0
; }
break
;
case1:
if (header_b != 0
) temp =header_b;
for (int i = 0; i < size_b; ++i)
size_b = 0
; header_b = 0
; header_b_cur = 0
; }
break
; }
return
list;
}
C 資料結構與演算法之雙快取佇列實現方法詳解
雙快取佇列 是我在一次開發任務中針對特殊場景設計出來的結構。使用場景為 傳送端持續向接收端傳送資料報 並且不理會接收端是否完成業務邏輯。由於接收端在任何情況下停止響應即可能產生資料丟失,因此無法簡單的設計一條執行緒安全佇列來對資料寫入或讀取 讀取資料時將佇列上鎖視為對寫入的停止響應 鑑於此,我的設計...
資料結構與演算法 雙端佇列
雙端佇列和普通佇列不同的地方是既可以隊首和隊尾進行插入,同時也就可以從隊首和隊尾進行remove刪除 同時不遵循先進先出或者先進後出的規則,這需要通過具體的演算法實現來確定,這個資料結構的實現過程如下 class deque def init self self.items defisempty s...
python資料結構與演算法 佇列與雙端佇列
雙端佇列 佇列 coding utf 8 deque 建立乙個空的雙端佇列 add front item 從隊頭加入乙個item元素 add rear item 從隊尾加入乙個item元素 remove front 從隊頭刪除乙個item元素 remove rear 從隊尾刪除乙個item元素 is...