日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言 多个线程对同一变量执行memcpy_手把手带你实现线程池

發布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 多个线程对同一变量执行memcpy_手把手带你实现线程池 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

執行與任務分離的組件— 線程池

wangbojing/threadpool?github.com

多線程技術主要解決了處理器單元內多個線程執行的問題,它可以顯著的減少處理器單元的閑置時間,增加處理器單元的吞吐能力。線程池是多線程編程的一個必要組件,并且對于很多編程人員都是透明的,更是神秘的。

線程池的概念,是一個用來管理一組執行任務線程的工具。既然是管理工具,那么該工具管理是用來管理任務與執行的。如圖一線程池組件拓撲圖,執行隊列(Workers),任務隊列(Jobs)和池管理(Pool Manager)三部分組成。

執行隊列(Workers)是用來存放運行線程的隊列。

任務隊列(Jobs)是用來存放需要被執行的任務隊列。

池管理(Pool Manager)主要是管理執行隊列的執行順序,執行任務的時間長短,對長時間沒有使用的執行單元進行釋放,執行單元滿負荷運行的時及時添加執行單元;記錄未執行的任務數量,對新任務入隊,即將執行的任務出隊等等。

圖一 線程池組件拓撲圖

執行隊列(Workers)中的每一個執行單元(Worker)由哪些元素組成?線程ID,退出標志。

任務隊列(Jobs)中的每一個任務(Jobs)的組成元素?執行每一個任務的具體執行函數,每一個任務的執行參數。

池管理(Pool Manager)由哪些元素組成?每一個新任務添加與執行時的移除用的互斥鎖,每一個線程掛起的時所等待的條件變量。

根據分析如圖二線程池的類圖。

圖二線程池的類圖

到這里一個簡單的線程池就已經可以呼之欲出了。以下為實現代碼

#include

這樣的線程池還是只是一個Demo,原因有如下幾點需要我們值得改進的。

  • 線程池的線程數量是確定的,不能隨著系統任務請求數量放縮線程池的大小。
  • 任務數量的統計,并沒有對任務隊列進行統計
  • 執行任務中的線程數量,等待執行的任務數量進行統計
  • 每一個執行任務的時間沒有做限制,
  • IO密集型與計算密集型區分,線程池非常常用,但是根據不同的業務場景需要設置不同配置
  • 在用戶任務執行函數里,用戶主動的調用了pthread_exit退出線程的保護機制
  • 針對于以上幾點問題,改進了一版線程池

    #include

    總結

    以上是生活随笔為你收集整理的c语言 多个线程对同一变量执行memcpy_手把手带你实现线程池的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。