基於ACE應用程式設計框架 執行緒池 ACE

2021-04-24 00:35:10 字數 1263 閱讀 2107

, private imanager ; manager () : shutdown_(0), workers_lock_(), workers_cond_(workers_lock_) /* 執行緒處理函式 */ int svc (void) // choose a worker. worker *worker = 0; /* 這對大括號中的**從worker執行緒池中獲取乙個工作執行緒,執行緒池由 this->workers_lock_互斥體加以保護,如果沒有worker可用,manager 會阻塞在workers_lock_條件變數上,等待某個執行緒回來工作 */ // ask the worker to do the job. // 將請求訊息放入到worker的訊息佇列中 worker->putq (mb); } return 0; } int shut_down (void); ace_thread_t thread_id (worker *worker); /* 提供給worker的介面,用於在worker完成處理後,將自己放入到執行緒池隊 列,並通知manager */ virtual int return_to_work (worker *worker) private: // 建立worker執行緒池 int create_worker_pool (void) return 0; } int done (void); private: int shutdown_; /* workers_lock_ 執行緒池佇列的互斥體,在對執行緒池進行操作時,需要通過互斥鎖來保護 所以在所有的執行緒池佇列佇列操作前都有這樣的語句: ace_guard_return (ace_thread_mutex, worker_mon, this->workers_lock_, -1); */ ace_thread_mutex workers_lock_; ace_condition

workers_cond_; /* 執行緒池佇列 */ ace_unbounded_queue

workers_; }; 幾點說明: ace_guard_return巨集的作用:這個巨集會建立乙個ace_guard物件,ace_guard物件用於對互斥鎖的獲取和釋放。 ace_guard物件利用了物件構造和析構函式完成鎖的獲取和釋放,也就是說在建立ace_guard物件時獲取,在析構ace_guard物件時釋放鎖。在manager的svc函式中,獲取worker的操作使用一對花括號擴了起來,目的就是通過ace_guard物件的作用域,在括號結束時將鎖釋放。 示例**中略去了shut_down函式的實現,該函式主要是通過向worker傳送mb_hangup訊息來通知worker執行緒結束處理。 下面看一下worker類的實現: class worker : public ace_task

Linux應用程式設計 多執行緒

執行緒優點是執行緒的上下文切換的開銷比建立程序小很多。在 linux 中,一般 pthread 執行緒庫是一套通用的執行緒庫,是由 posix 提出的,因此具有很好的可移植性。pthread create pthread exit pthread join pthread cancel pthrea...

IAP 應用程式設計

1 檢查是否需要對第二部分 進行更新 2 如果不需要更新則轉到4 3 執行更新操作 4 跳轉到第二部分 執行 第一部分 必須通過其它手段,如jtag或isp燒入 第二部分 可以使用第一部分 iap功能燒入,也可以和第一部分 一道燒入,以後需要程式更新是再通過第一部分iap 更新。對於stm32來說,...

串列埠應用程式設計

include include 標準輸入輸出定義 include 標準函式庫定義 include unix 標準函式定義 include include include 檔案控制定義 include ppsix 終端控制定義 include 錯誤號定義 include include include...