「雙快取佇列」是我在一次開發任務中針對特殊場景設計出來的結構。使用場景為:傳送端持續向接收端傳送資料報——並且不理會接收端是否完成業務邏輯。由於接收端在任何情況下停止響應即可能產生資料丟失,因此無法簡單的設計一條執行緒安全佇列來對資料寫入或讀取(讀取資料時將佇列上鎖視為對寫入的停止響應)。
鑑於此,我的設計思路如下:
接收端首先向a佇列中寫入資料,然後當資料處理請求到來的時候切換到b佇列繼續寫入,之後將a佇列中的資料交給資料處理模組,處理完成以後a佇列資料清空。當下一次資料處理請求到來時,再將寫入請求切換回a佇列,並把b佇列中的資料提交給資料處理模組再清空佇列b,輪流作業。
有了思路以後,**就比較簡單了。
#include
template
class doublearray ;
int size_a;
int size_b;
node* header_a;
node* header_a_cur;
node* header_b;
node* header_b_cur;
int trigger;
public:
doublearray()程式設計客棧 : size_a(0), size_b(0), trigger(0), header_a(0), header_a_cur(0), header_b(0), header_b_cur(0)
int push(t t);
std::list& fetch(std::list& list);
};template&l程式設計客棧t;typename t>
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;
case 1:
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;
}注:開發環境與ide分別為centos 7,netbeans 8.2
本文標題: c++資料結構與演算法之雙快取佇列實現方法詳解
本文位址: /ruanjian/c/201223.html
資料結構與演算法 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...