HiroLab

プログラミングに関する情報発信サイト。

C++

【C++】Day 18:マルチスレッドプログラミングの基礎

投稿日:

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までの数値を合計するものです。各関数は独立して動作し、最終的な合計値を表示してください。

これらの例題と演習問題を解くことで、マルチスレッドプログラミングの基礎を理解し、並行処理を効果的に実装するスキルを向上させることができます。問題を解いたら、スレッドが正しく同期されているかどうかを確認してみてください。

-C++
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【C++】Day 4:制御文の一つである条件分岐(if文、else文、else if文)について

Day 4では、制御文の一つである条件分岐(if文、else文、else if文)について学習します。 条件分岐は、特定の条件に基づいてプログラムのフローを制御するために使用されます。 条件が真(tr …

【C++】Day1-30 総復習/演習問題

以下に、Day 1-30までのC++学習カリキュラムにおける総復習と演習問題を提示します。 演習問題に対する回答と解説も記載しますので、各問題に取り組んで理解を深めてください。 ※後半に回答/解説を記 …

【C++】Day 3:C++の演算子について

Day 3では、C++の演算子について学習します。 演算子はプログラム内で値を操作するための特殊な記号やキーワードです。 C++には様々な演算子が存在し、数値演算、論理演算、代入演算などがあります。以 …

【C++】Day 8:オブジェクト指向プログラミング(OOP)の基礎

Day 8では、オブジェクト指向プログラミング(OOP)の基礎について学習します。 以下にそれぞれの内容を詳細に説明し、例題と演習問題を提示します。   オブジェクト指向プログラミングの基礎 …

【C++】Day 12:C++の標準ライブラリの使用

Day 12では、C++の標準ライブラリの使用について学習します。 C++の標準ライブラリは、様々な便利な関数やコンテナ、アルゴリズムなどを提供しており、プログラムの記述を簡単にしたり、高度な機能を利 …