執行緒池的思想早有耳聞,中間也涉及好多內容,回過頭來重新設計一下執行緒池.
使用者視角:
1.建立乙個執行緒池物件, threadpool thpool(int minthreads); //同時會建立乙個管理者執行緒,負責維護執行緒池,可以通過演算法動態排程增加或減少執行緒
2.加入乙個任務 int thpool.pushtask((void*)(*)(void),bool ifneedresult=false); //如果不需要返回結果效能更好,返回乙個key查詢任務執行狀態
3.根據key得到任務執行結果 struct result getresult(int key) //返回乙個結果結構體,要求呼叫者先檢查狀態碼,再使用val值
enum status //任務狀態 ----> 正常結束,忙,尚未執行,無此任務,出錯
struct result;
#endif
//!_loop_queue
template
loop_queue
::loop_queue(int
capacity)
template
inline
bool loop_queue::push(const t&val)
else
arr[rear] = val; //
插入if (rear == m_capacity) //
尾部 rear = 0
;
else
++rear;
return
true;}
template
t loop_queue
::pop() //
為空返回(t)0,用前先判斷為空最好,想了下還是不拋異常好,雖然stl是這樣做
}template
int loop_queue::getsize()
else
return0;
}template
inline
int loop_queue::getcapacity()
template
inline
bool loop_queue::empty()
template
inline loop_queue
::~loop_queue()
迴圈佇列 模板幾個要點:佇列唯一的建構函式是整形的有參構造,指定最大佇列長度(元素數量)
當佇列滿時push操作會返回false,正常返回true, 當佇列已經為空的時候返回t(0),強制要求模板t型別有int轉換建構函式
比如採用下面這個任務結構體
typedef structtask_t
}task_t;
併發1 任務與執行緒
併發通常是提高執行在單處理器上的程式的效能。當以單執行緒執行所有任務時,雖然不會因為切換執行緒節省資源,但一旦出現阻塞 io請求等 則在阻塞接觸前單執行緒會發生等待。如果採用併發可在此時切換任務節省時間。所以沒有任務會被阻塞的情況下在單處理器上使用併發並沒有意義 cpu輪流給每個執行緒任務分配其占用...
1606 例 1 任務安排 1
1606 例 1 任務安排 1 時間限制 1000 ms 記憶體限制 524288 kb 提交數 203 通過數 149 題目描述 有 n 個任務排成乙個序列在一台機器上等待執行,它們的順序不得改變。機器會把這 n 個任務分成若干批,每一批包含連續的若干個任務。從時刻 0 開始,任務被分批加工,執行...
第4周任務1
程式頭部注釋開始 程式的版權和版本宣告部分 檔名稱 sanjiaoxing.cpp 作 者 鄒議鵬 完成日期 2012 年 3 月 14 日 版 本 號 41.vc 對任務及求解方法的描述部分 輸入描述 問題描述 程式輸出 程式頭部的注釋結束 include include math.h using...