ホームページ  >  記事  >  バックエンド開発  >  C++ 標準スレッド ライブラリを使用してマルチスレッド プログラミングを実装するにはどうすればよいですか?

C++ 標準スレッド ライブラリを使用してマルチスレッド プログラミングを実装するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-06-04 19:36:00587ブラウズ

マルチスレッド プログラミングでは、タスクを並列実行することで効率が向上します。C++ 標準スレッド ライブラリを使用してマルチスレッドを実装する手順は次のとおりです。 std::thread を使用してスレッドを作成し、呼び出し可能なオブジェクト (ラムダ関数または関数) を渡します。ポインター) をコンストラクターのパラメーターとして使用します。 join() メソッドを呼び出してスレッドが終了するのを待ち、子スレッドが実行を完了するまでメインスレッドをブロックします。実践例:素数を並列計算し、計算範囲を複数のスレッドに割り当てて完了を待ち、結果をマージして素数リストを出力します。

如何使用 C++ 标准线程库实现多线程编程?

C++ 標準スレッド ライブラリを使用してマルチスレッド プログラミングを実装します

マルチスレッド プログラミングは、複数のタスクを並行して実行することでプログラムの効率を向上させます。この記事では、C++ 標準スレッド ライブラリを使用してマルチスレッド プログラミングを簡単に実装する方法を紹介し、実際のケースを示します。

スレッドの作成

スレッドを作成するには、呼び出し可能なオブジェクトへの参照をコンストラクターへのパラメーターとして受け取る std::thread クラスを使用できます。呼び出し可能なオブジェクトは通常、ラムダ関数または関数ポインターです。例: std::thread 类,它接收一个可调用对象的引用作为其构造函数的参数。可调用对象通常是一个 lambda 函数或一个函数指针。例如:

// 定义一个函数指针
void thread_function() {
  // ... 执行此线程应执行的任务
}

// 创建线程
std::thread t(thread_function);

等待线程终止

创建线程后,主线程可以通过调用 join() 方法等待其终止。join()

// 等待子线程完成
t.join();

スレッドの終了を待機しています

スレッドを作成した後、メインスレッドは join() メソッドを呼び出すことで終了を待つことができます。 join() メソッドは、子スレッドと呼ばれる作成スレッドが実行を完了するまで、メイン スレッドをブロックします。例:

#include <iostream>
#include <vector>
#include <thread>

bool is_prime(int n) {
  if (n < 2) {
    return false;
  }
  for (int i = 2; i <= n / 2; ++i) {
    if (n % i == 0) {
      return false;
    }
  }
  return true;
}

std::vector<int> find_primes(int start, int end) {
  std::vector<int> primes;
  for (int i = start; i <= end; ++i) {
    if (is_prime(i)) {
      primes.push_back(i);
    }
  }
  return primes;
}

int main() {
  int start = 1;
  int end = 1000000;
  int num_threads = 4;

  // 分配计算范围
  int range_size = (end - start) / num_threads;
  std::vector<std::thread> threads;
  std::vector<std::vector<int>> primes_list;
  for (int i = 0; i < num_threads; ++i) {
    int thread_start = start + i * range_size;
    int thread_end = thread_start + range_size - 1;
    threads.emplace_back(std::thread(find_primes, thread_start, thread_end));
  }

  // 等待线程完成并合并结果
  for (auto& thread : threads) {
    std::vector<int> primes;
    thread.join();
    thread.get(primes);
    primes_list.push_back(primes);
  }

  std::vector<int> primes;
  for (auto& list : primes_list) {
    primes.insert(primes.end(), list.begin(), list.end());
  }

  // 打印素数列表
  for (int prime : primes) {
    std::cout << prime << " ";
  }
  std::cout << std::endl;

  return 0;
}

実際のケース: 素数の並列計算

実際のケースを通してマルチスレッドプログラミングを実証しましょう。複数のスレッドを使用して、指定された範囲の素数を並行して計算するプログラムを作成します。

rrreee このプログラムを実行すると、指定された範囲内のすべての素数が出力されます。

🎜🎜🎜注: 🎜このチュートリアルでは、C++ 標準スレッド ライブラリを使用したマルチスレッド プログラミングの基本概念と実践的なアプリケーションを説明します。より高度な機能とベスト プラクティスについては、C++ 標準ライブラリのドキュメントとオンライン リソースを参照することをお勧めします。 🎜

以上がC++ 標準スレッド ライブラリを使用してマルチスレッド プログラミングを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。