多併發時避免系統不斷的建立和銷毀執行緒,過度消耗資源、切換等,一般都使用執行緒池來管理執行緒。可以讓乙個執行緒重複執行多個任務而提高效率,話不多說使用c++11 特性寫了乙個執行緒詞,直接上**記錄一下,輪子就可以復用啦!
執行緒池的作用:非同步解耦!!!
主要構成:執行緒,任務,管理元件。
singleton.h
#pragma once
#includetemplateclass csingeton
return m_prtinstance;
}protected:
csingeton() {}
csingeton& operator=(const csingeton& other) = delete;
csingeton(const csingeton& other) = delete;
private:
static std::shared_ptrm_prtinstance;
};templatestd::shared_ptrcsingeton::m_prtinstance = nullptr;
ctask 類為所有任務的基類,繼承於此類的任務既可以作為執行緒池的task,另外任務的具體引數可以自行按需求新增。
threadpool.h
#pragma once
#include #include #include #include #include #include #include #include "singleton.h"
class ctask
virtual void run() = 0;
void setconnfd(const int& ifd)
void setstrname(const std::string& strname)
protected:
int m_iconnfd;
std::string m_strname;
};#define max_thread_size 0xffff
class cthreadpool : public csingeton
~cthreadpool()
void addtask(const std::shared_ptr& task)
return true;
} );
m_quetasks.emplace(task);
m_contaskempty.notify_one();
}void runtask()
return false;
});auto task = std::move(m_quetasks.front());
m_quetasks.pop();
task->run();
m_contaskfull.notify_all();
}
}void start(int isize);
3、使用方式:
main.cpp
#include #include "threadpool.h"
class cmytask : public ctask
pool->stop();
}int main(void)
4、編譯執行
g++ -o main -pthread -std=c++11
或者直接用vs2013/vs2017等支援c++11 的ide 執行
執行結果:
-------------------------------
connfd is 4186
task name is task+4186
task thread id is 7764
-------------------------------
-------------------------------
connfd is 4187
task name is task+4187
task thread id is 5536
-------------------------------
-------------------------------
connfd is 4188
task name is task+4188
task thread id is 5536
-------------------------------
-------------------------------
connfd is 4189
task name is task+4189
task thread id is 5536
-------------------------------
C 11實現乙個簡單的執行緒池
為了不讓手生,邊複習邊手擼了乙個執行緒池,量比較少,如下,用了一些c 11的實現,語言標準嘛,就是跨平台的 thread poo.h ifndef thread pool define thread pool include include include include include inclu...
C 11執行緒池
執行緒池其實就是把任務佇列和工作執行緒綁到一起,提供乙個向任務佇列中新增任務的介面,下面的 為了表達更加清楚沒有分成標頭檔案和原始檔,僅僅是提供思路。同步機制利用的互斥鎖 條件變數,也可以使用c 11提供的原子數封裝的自旋鎖 條件變數。兩種組合的區別在於,自旋鎖比較適合當任務比較簡單的時候使用,可以...
C 11 執行緒池
根據提出的思路略有改動 已測試 pragma once include include include include include include include include include include include 執行緒池 class threadpool if this task...