跨平臺線程池實現

           本線程池的作用是管理阻塞的網絡操作函數的調用...每次網絡操作調用都加入到線程池當中,然後線程回調函數執行 取任務的操作並執行這次任務。

   線程池的設計

    將線程池的所有操作都封裝在類中...外界使用的話只需要new 一個這個線程池對象。

    1.加任務函數

    2.取任務函數

    3.初始化線程池

    4.銷燬線程池

   線程池的實現

   實現跨平臺線程池需要了解平臺相關的線程庫,linux一般採用posix標準的線程庫(大部分使用於ios,android),windows則採用windows.h 下的線程相關函數.

   1.信號量

     爲了控制線程訪問,可以採用信號量來協調線程的訪問線程競爭資源的順序。

    linux 採用 sem_t ,sem_init,sem_wait,sem_post來實現

    windows採用WaitForSingleObject,ReleaseSemaphore來實現

  2.互斥鎖

   linux 採用pthread_mutex_t,pthread_mutex_lock,pthread_mutex_unlock

   windows採用CRITICAL_SECTION,InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection

  3.對於線程池的任務其回調函數是一直在執行操作直到線程被關閉,或者程序終止,進程終止

  4.資源的訪問控制

     (1)對於信號量初始值應該將可用資源設置爲0

     (2)當用戶向線程池中加入task時,信號量加1,表示可用資源加1.

     (3)線程回調函數提取任務,若任務>0則提取任務並執行,若<=0則wait

  5.線程池銷燬,可以在主線程中調用線程池釋放資源函數並強制關閉線程池。如果線程池的生命週期是整個進程或者程序的生命週期,可以利用系統回收。

線程池的工作流程:

首先需要明確的是線程池中的競爭資源...生產資源,消費資源...在線程池中 這兩者分別是,任務進隊列,線程執行隊列中的任務,這裏就設置兩個資源標識,A代表生產任務線程,B代表執行任務線程。 採用信號量來同步多個線程(linux 和windows 與 移動平臺 線程同步方式不同,移動平臺不能直接使用sem_t ,平臺不支持)生產資源時需要等待 可用的線程來生產資源,  資源隊列需要加鎖,消費資源時需要等待生產任務線程。


發佈了77 篇原創文章 · 獲贊 21 · 訪問量 105萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章