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

C言語のpthread_self()関数でスレッドIDを取得する方法

pthread_self()関数とは

C言語のPOSIXスレッド(pthread)プログラミングでは、pthread_self()関数を使用することで、現在実行中のスレッド自身のID(スレッド識別子)を取得できます。この関数が返すIDは、システム上に存在するスレッドを一意に識別するために利用されます。

ただし、注意すべき点があります。複数のスレッドが動作している環境で、あるスレッドが終了すると、そのスレッドが使用していたIDが新しいスレッドに再利用される場合があります。そのため、IDの一意性が保証されるのは「実行中のスレッド同士」の間だけです。

サンプルコード

以下は、メインスレッドと生成したスレッドの両方からスレッドIDを取得して表示する簡単なプログラムです。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void* func(void* p) {
    // pthread_self()で現在のスレッドIDを取得
    printf("From the function, the thread id = %d\n", pthread_self());
    pthread_exit(NULL);
    return NULL;
}

main() {
    pthread_t thread; // スレッドの宣言
    pthread_create(&thread, NULL, func, NULL);
    printf("From the main function, the thread id = %d\n", thread);
    pthread_join(thread, NULL); // メインスレッドと結合
}

実行結果

From the main function, the thread id = 1
From the function, the thread id = 1

コードのポイント

  • pthread_self():呼び出したスレッド自身のIDをpthread_t型で返します。
  • pthread_create():新しいスレッドを生成し、そのIDを第1引数のpthread_t型変数に格納します。
  • pthread_join():指定したスレッドの終了を待機し、リソースを解放します。

この例では、pthread_create()で取得したスレッドIDと、スレッド関数内でpthread_self()が返すIDが一致しています。これは、pthread_create()の第1引数に渡した変数に、生成されたスレッドのIDが書き込まれるためです。

注意点

pthread_t型は環境(OSやライブラリ)によって内部実装が異なるため、移植性を考慮する場合は、IDを整数として直接比較するのではなく、pthread_equal()関数を使用してスレッドIDを比較することが推奨されます。

  1. C#でスレッドの優先度を表示する方法|Priorityプロパティの使い方

    C#でスレッドの優先度を表示するには C#でスレッドの優先度を確認するには、Priorityプロパティを使用します。このプロパティは、OSがスレッドをどの程度の優先順位でスケジューリングするかを示す値を返します。 まず、CurrentThreadプロパティを使って、現在実行中のスレッドの情報を取得します。 Thread thread = Thread.CurrentThread; 次に、thread.Priorityプロパティを参照することで、そのスレッドの優先度を表示できます。 thread.Priority サンプルコード C#でスレッドの優先度を表示する完全なコード例を見てみましょう。

  2. Javaのスレッドプールとは?仕組みと実装例をわかりやすく解説

    スレッドプールとはスレッドプール(Thread Pool)とは、あらかじめ初期化された複数のスレッドをまとめて管理する仕組みのことです。基本的な考え方は、アプリケーションの起動時に一定数のスレッドを作成してプールに入れておき、それらのスレッドが仕事を待機するというものです。サーバーがリクエストを受け取ると、利用可能なスレッドがあればプールから1つ取り出して処理を任せます。スレッドはタスクの完了後、破棄されることなくプールへ戻り、次の仕事を待ちます。もしプール内に空きスレッドが存在しない場合は、空きができるまでサーバー側で待機することになります。スレッドプールのメリットタスクごとに新しいスレッド