C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のスレッドget_id()関数の使い方を徹底解説

このチュートリアルでは、C++におけるスレッドのget_id()関数について、サンプルコードを交えながら詳しく解説します。

get_id()関数は、現在のプロセスの状態を確認した上で、実行中のスレッドに割り当てられた一意のIDを返す関数です。この関数は引数を一切取らず、呼び出すだけで現在実行中のスレッドの識別子を取得できるのが特徴です。

get_id()関数の役割

マルチスレッドプログラミングでは、複数のスレッドが同時に動作するため、どのスレッドがどの処理を担当しているのかを識別することが重要になります。get_id()関数を活用することで、各スレッドに固有のIDを取得でき、デバッグやログ出力の際に非常に役立ちます。

サンプルコード

以下は、2つのスレッドを生成し、それぞれのスレッドIDを取得して表示するプログラムの例です。

#include <chrono>
#include <iostream>
#include <thread>
using namespace std;

// スレッドで実行する関数
void sleepThread(){
    this_thread::sleep_for(chrono::seconds(1));
}

int main(){
    // スレッドの生成
    thread thread1(sleepThread);
    thread thread2(sleepThread);

    // 各スレッドのIDを取得
    thread::id t1_id = thread1.get_id();
    thread::id t2_id = thread2.get_id();

    // IDを表示
    cout << "thread1に紐づくID= " << t1_id << endl;
    cout << "thread2に紐づくID= " << t2_id << endl;

    // スレッドの終了を待機
    thread1.join();
    thread2.join();

    return 0;
}

実行結果

thread1に紐づくID= 135456142132844
thread2に紐づくID= 135121414221716

コードのポイント

このプログラムの動作を順を追って説明します。

1. スレッドの生成:sleepThread()関数を指定して2つのスレッド(thread1とthread2)を生成します。各スレッドは1秒間のスリープ処理を実行します。

2. IDの取得:get_id()関数を呼び出すことで、thread::id型のスレッドIDを取得します。実行結果を見ると、thread1とthread2で異なるIDが割り当てられていることがわかります。

3. スレッドの待機:join()関数を呼び出すことで、メインスレッドは各スレッドの処理が完了するまで待機します。これにより、プログラムがスレッドの終了前に強制終了することを防ぎます。

なお、スレッドIDの具体的な値は実行環境や実行のタイミングによって毎回変わる点に注意してください。IDはあくまでスレッドを一意に識別するためのものであり、特定の値を期待するものではありません。

  1. C++のlog()関数とは?自然対数を求める方法をわかりやすく解説

    C++の標準ライブラリには、数学的な計算を行うための便利な関数が多数用意されています。その中でもlog()関数は、数値の自然対数(ネイピア数 e を底とする対数)を求めるために使用される重要な関数です。log()関数の基本情報C/C++のライブラリ関数 double log(double x) は、引数 x の自然対数(底が e の対数)を返します。この関数を使用するには、ヘッダーファイル <cmath> をインクルードする必要があります。関数の宣言double log(double x)パラメータと戻り値パラメータ: x は浮動小数点型(double)の値です。自然対数を求めたい

  2. C++のswap()関数とは?2つの変数の値を入れ替える方法をサンプルコード付きで解説

    swap()関数とは C++のswap()関数は、2つの値を入れ替える(交換する)ための関数です。この関数を利用すれば、一時的な第三の変数を自分で用意することなく、2つの変数の値を簡単に入れ替えることができます。 swap()関数の構文 void swap(int variable_name1, int variable_name2); 変数に値を代入してswap()関数に渡した場合、関数内では値の入れ替えが行われますが、呼び出し元の実際の変数の値は変わりません。これは、引数が「値渡し」で渡されるためです。実際の変数の値を入れ替えたい場合は、後述する「参照渡し」を使用します。 例1:s