C 11 寫乙個執行緒池

2021-10-04 11:19:52 字數 2411 閱讀 4588

多併發時避免系統不斷的建立和銷毀執行緒,過度消耗資源、切換等,一般都使用執行緒池來管理執行緒。可以讓乙個執行緒重複執行多個任務而提高效率,話不多說使用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...