首頁 > 後端開發 > C++ > C 11 執行緒池如何改善任務管理並減少開銷?

C 11 執行緒池如何改善任務管理並減少開銷?

Barbara Streisand
發布: 2024-12-22 21:35:10
原創
1006 人瀏覽過

How Can C  11 Thread Pools Improve Task Management and Reduce Overhead?

C 11 中的執行緒池

挑戰:
建立和管理執行緒可能會很昂貴,執行緒可能會很昂貴,執行緒可能會很昂貴,尤其是在以下情況下對每個任務重複進行。我們如何建立一個執行緒池,允許我們將多個任務傳送到執行緒池,從而避免創建執行緒的開銷?

答案:

實作執行緒C 11 中的池涉及建立一個類別來管理可重用來執行任務的執行緒集合。以下是關鍵方面的細分:

實作 ThreadPool 類別:

ThreadPool 類別定義了用於建立、管理和停止執行緒池的介面。

1。 ThreadPool::Start:
透過建立指定數量的執行緒來初始化執行緒池。這些執行緒將執行無限循環,等待任務。

2. ThreadPool::ThreadLoop:
池中每個執行緒執行的無限迴圈。它不斷檢查新任務,執行它們,並重複直到發出終止信號。

3. ThreadPool::QueueJob:
將任務加入執行緒池佇列。任務是一個定義要完成的工作的函數物件。

4. ThreadPool::busy:
檢查執行緒池是否有任何待處理的任務。

5. ThreadPool::Stop:
終止執行緒池,等待所有執行緒完成目前任務。

整合 ThreadPool:

一旦ThreadPool類別已定義,您可以將其用作如下:

thread_pool->QueueJob([] { /* ... */ });
登入後複製

範例:

std::vector<std::thread> workers;
int total = 4;
int arr[4] = {0};

void each_thread_does(int i) {
  arr[i] += 2;
}

int main() {
  // ThreadPool Example
  ThreadPool thread_pool;
  thread_pool.Start();

  for (int i = 0; i < 8; ++i) {
    for (int j = 0; j < 4; ++j) {
      thread_pool.QueueJob(std::bind(each_thread_does, j));
    }
  }

  // Wait for the thread pool to complete
  while (thread_pool.busy()) {}
  thread_pool.Stop();

  arr[4] = std::min_element(arr, arr + 4);
  return 0;
}
登入後複製

此範例示範如何使用提供的類別建立執行緒池,並向池中提交多個任務,而無需使用需要重複建立和刪除執行緒。

以上是C 11 執行緒池如何改善任務管理並減少開銷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板