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 2:変数とデータ型について

Day 2では、変数とデータ型について学習します。 変数はデータを格納するためのメモリ上の領域であり、データ型はその変数が保持できるデータの種類を指定します。 C++にはいくつかの基本的なデータ型があ …

【C++】Day 28:デザインパターン「行動型パターン」

Day 28では、デザインパターンのうち「行動型パターン」について学習します。 行動型パターンは、オブジェクト間の相互作用や責任の分担に関するパターンです。主な行動型パターンには、ストラテジ、オブザー …

【C++】Day 16:C++のラムダ式とSTLアルゴリズム

Day 16では、C++のラムダ式とSTLアルゴリズムについて学習します。 ラムダ式は、簡単な関数をインラインで定義する方法であり、STLアルゴリズムは標準ライブラリのアルゴリズム関数です。 以下にそ …

【C++】Day 27:デザインパターン「構造型パターン」

Day 27では、デザインパターンのうち「構造型パターン」について学習します。 構造型パターンは、クラスやオブジェクトの構造を改良するためのパターンです。主な構造型パターンには、アダプタ、デコレータ、 …

【C++】C++で開発することのメリット/デメリット

C++は多くの利点を持つ強力なプログラミング言語ですが、一方でいくつかのデメリットもあります。 以下に、C++で開発することのメリットとデメリットを詳細に説明します。   メリット 1. パ …