執行緒池 1 任務佇列模組

2022-04-12 00:43:09 字數 1482 閱讀 3143

執行緒池的思想早有耳聞,中間也涉及好多內容,回過頭來重新設計一下執行緒池.

使用者視角:  

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 struct

task_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...