話說這個執行緒池也寫了好久了 ,做簡單的東西的時候也在用,最近因為乙個失誤刪掉了自己的一些檔案導致重新寫了一遍 所以貼出來,以防萬一 並且跟大佬們交流
//
// created by cxhmyself on 18-4-10.
//#include //都需要與互斥量一起才能工作
#include #include #include #include #include "../epoll/epoll.h"
//template > // 模板的所有要定義在同乙個檔案裡面
templateclass threadsafe_queue
threadsafe_queue& operator=(const threadsafe_queue & ) = delete;
void push(const t data)
bool try_pop(t& value)
std::shared_ptrtry_pop()
void wait_and_pop(t& value) // 用來得到頂部資料以及執行緒安全
);value = dq.front();
dq.pop();
}std::shared_ptrwait_and_pop()
);std::shared_ptrresult;
dq.pop();
return result;
}bool empty()
private:
//分別是互斥量 條件變數 和佇列本身
std::queuedq;
std::mutex mut;
std::condition_variable cond;
};#endif
/*最簡單的執行緒池*/
#ifndef studentcharge_threadpool_h
#define studentcharge_threadpool_h
/*思考如何加入任務 使其為乙個單源*/
/*任務類 t */
templateclass thread_pool
else }}
public:
/*建構函式*/
thread_pool(epoll *e = nullptr) :stop(false) ,epollpoint(e)
catch (...)
}/*析構函式*/
~thread_pool()
/*新增到任務佇列*/
void add_task(t tt )
void * getepoll()
private:
/* 請求佇列 這裡用的智慧型指標是指目標使用者的所有的資料 因為任務可能多樣性所以先傳入整體資料 佇列智慧型指標型別 */
threadsafe_queue< t > worker_queue;
/*執行緒池*/
std::vectorthread_pool;
/*檢測是否執行緒池被銷毀 被銷毀則清除所有的執行緒*/
bool stop;
/*執行緒池數量*/
size_t sum_threads;
/*這個屬於獨特的屬性*/
epoll * epollpoint;
};#endif //curriculumdesign_threadpool_h
執行緒池(一) 實現乙個簡單的執行緒池
我們知道頻繁的建立 銷毀執行緒是不可取的,為了減少建立和銷毀執行緒的次數,讓每個執行緒可以多次使用,我們就可以使用執行緒池,可以降低資源到的消耗。執行緒池裡面肯定有多個執行緒,那麼我們就簡單的用乙個陣列來儲存執行緒,那我們我們預設裡面有 5 個執行緒。那我們執行緒池裡只有五個執行緒能同時工作,那同時...
乙個簡單的執行緒池
最近自己,很煩所以超級久沒學習了,今天趁著抗戰七十周年放三天假,趕緊看下書。廢話不多說。今天,介紹乙個簡單的執行緒池。首先說明什麼是執行緒池,執行緒池 是包含若干個執行緒,來處理多個任務的執行緒集合。它的目的是用來處理,大量的相對短暫的任務。這裡我們先來解釋下兩個概念,什麼叫大量呢?對於執行緒來說,...
乙個簡單的執行緒池實現
乙個linux下簡單的執行緒池實現 實現了大部分邏輯,有部分邏輯未實現,只是提供乙個思路 執行緒池類 threadpool.h created on oct 13,2016 author luokun ifndef threadpool h define threadpool h include i...