亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現類似JAVA線程池的C++線程池

發布時間:2021-07-08 14:29:24 來源:億速云 閱讀:319 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“如何實現類似JAVA線程池的C++線程池”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何實現類似JAVA線程池的C++線程池”這篇文章吧。

什么是線程池

線程池(thread pool)是一種線程使用模式。線程過多或者頻繁創建和銷毀線程會帶來調度開銷,進而影響緩存局部性和整體性能。而線程池維護著多個線程,等待著管理器分配可并發執行的任務。這避免了在處理短時間任務時創建與銷毀線程的代價,以及保證了線程的可復用性。線程池不僅能夠保證內核的充分利用,還能防止過分調度。

線程池的實現

       線程池在JAVA平臺上已經有成熟的實現方式,本文介紹參考JAVA線程池實現方式實現的C++線程池類庫。

       該類庫代碼已上傳至github倉庫中,下載地址為:https://github.com/xiaoba-8/mixthread

       該類庫中主要的類的關系如下圖所示:

如何實現類似JAVA線程池的C++線程池

線程池類圖

       其中,IRuanble為接口類,類似JAVA中的Runnable接口;

       DefulatMutext 為訪問互斥體類,用于臨界資源時的加解鎖;

       RootThread為線程實現的基類,定義了線程中的通用的方法;

       CommonThread為一個簡單的線程實現類,類似于JAVA中的Thread類;

       DefaultThread類為另一線程實現類,以IRunnable為參數,可將IRunnable轉化為線程;

ThreadPool為線程池實現類,類似JAVA中的ThreadPool類。

類庫的安裝方法

1.     下載類庫實現源代碼:https://github.com/xiaoba-8/mixthread

2.     進入類庫根文件夾依次執行configure,make, make install

類庫的使用方法

與JAVA線程池的使用方式相似,首先創建實現IRunnable接口的類,然后交由ThreadPool類實例進行調度即可以。

以下按示例代碼:

1.     創建demo_main.cpp文件,代碼如下:

#include <stdio.h>
#include <mix/thread/ThreadPool.h>
class DemoThread : public mix::IRunnable
{
private:
    int id;
public:
    DemoThread(int id)
    {
       this->id = id;
    }
    virtual void Run()
    {
       for (int i = 0; i < 3; i++)
       {
           usleep(500);
           printf("Thread %d: loop index %d\n", id, i);
       }
    }
    virtual bool IsDelete ()
    {
       return true;
    }
    virtual int Priority()
    {
       return 0;
    }
    virtual void SetPriority(int priority)
    {
    }
    virtual void Cancel()
    {
    }
    virtual bool IsCanceled()
    {
       return false;
    }
    virtual void Pause() {}
    virtual void Resume() {}
    virtual bool IsPaused()
    {
       return false;
    }
    virtual std::string GetTaskId()
    {
       return "";
    }
    virtual void TryPause()
    {
    }
};
int main(int argc, char *argv[])
{
    mix::ThreadPool threadPool(10, 20, 5);
    printf("Mix Thread Begin\n");
    for (int i = 0; i < 5; i++)
    {
       threadPool.Execute(new DemoThread(i));
    }
    sleep(1);
    while (threadPool.GetActiveCount() > 0)
    {
       sleep(1);
    }
    printf("Mix Thread End\n");
    return 0;
}

2.     執行以下命令進行編譯,(假設mixthread安裝在/usr/local目錄下)

g++ -I/usr/local/include -g -O2 demo_main.cpp -pthread -o mix_thread_demo -lmixthread -pthread -Wl,-rpath -Wl,/usr/local/lib

生成執行程序mix_thread_demo

3.     執行結果

執行  ./mix_thread_demo, 顯示如下結果

./mix_thread_demo
Mix Thread Begin
Thread 3: loop index 0
Thread 4: loop index 0
Thread 2: loop index 0
Thread 1: loop index 0
Thread 0: loop index 0
Thread 4: loop index 1
Thread 3: loop index 1
Thread 2: loop index 1
Thread 1: loop index 1
Thread 0: loop index 1
Thread 4: loop index 2
Thread 3: loop index 2
Thread 2: loop index 2
Thread 1: loop index 2
Thread 0: loop index 2
Mix Thread End

以上是“如何實現類似JAVA線程池的C++線程池”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大化| 济源市| 武威市| 钟祥市| 高州市| 洛阳市| 淮安市| 麦盖提县| 民勤县| 金川县| 崇义县| 鸡西市| 楚雄市| 章丘市| 六盘水市| 葫芦岛市| 余干县| 马关县| 青海省| 凌源市| 峡江县| 甘洛县| 丰都县| 黑水县| 曲靖市| 简阳市| 宁南县| 兴文县| 长寿区| 新安县| 仙居县| 霍林郭勒市| 大冶市| 阿城市| 疏勒县| 德江县| 遂宁市| 米易县| 龙胜| 泰兴市| 堆龙德庆县|