Day 18では、マルチスレッドプログラミングの基礎について学習します。
マルチスレッドプログラミングは、複数のスレッドを使用してプログラムを並行して実行することを意味します。各スレッドは独立して動作し、複数のタスクを同時に処理できるため、性能や応答性の向上に役立ちます。
以下にマルチスレッドプログラミングの主な内容と、例題、演習問題を提示します。
マルチスレッドプログラミングの主な内容:
1. スレッドの作成と実行:
– C++では、`std::thread`クラスを使用して新しいスレッドを作成できます。
– スレッドを作成した後は、`std::thread`オブジェクトの`join()`メソッドを呼び出すことでスレッドを実行します。
2. スレッドの同期:
– 複数のスレッドが共有データにアクセスする場合、同期が必要になります。
– `std::mutex`を使用してデータへのアクセスを排他制御することができます。
3. スレッドの終了とリソースの解放:
– スレッドの実行が終了したら、`std::thread`オブジェクトの`join()`メソッドを呼び出してリソースを解放します。
例題:
#include <iostream> #include <thread> #include <vector> // 関数:指定した範囲の合計を計算する void calculateSum(int start, int end, int& result) { for (int i = start; i <= end; ++i) { result += i; } } int main() { int sum1 = 0; int sum2 = 0; // 2つのスレッドを作成し、合計の計算を並行して実行する std::thread thread1(calculateSum, 1, 50, std::ref(sum1)); std::thread thread2(calculateSum, 51, 100, std::ref(sum2)); // スレッドの実行を待つ thread1.join(); thread2.join(); int totalSum = sum1 + sum2; std::cout << "Total sum: " << totalSum << std::endl; return 0; }
演習問題:
1. `std::vector`に整数のデータが格納されているとき、このデータの合計を計算する関数をマルチスレッドで実行するプログラムを作成してください。ただし、複数のスレッドが同時にアクセスする可能性があるため、適切な同期処理を行ってください。
2. マルチスレッドを使用して並行して2つの関数を実行するプログラムを作成してください。1つの関数は1から100までの数値を合計するもので、もう1つの関数は1から50までの数値を合計するものです。各関数は独立して動作し、最終的な合計値を表示してください。
これらの例題と演習問題を解くことで、マルチスレッドプログラミングの基礎を理解し、並行処理を効果的に実装するスキルを向上させることができます。問題を解いたら、スレッドが正しく同期されているかどうかを確認してみてください。