POSIXスレッド

POSIXスレッドの最新ニュースをまとめて検索!

POSIXスレッド は、スレッドPOSIX標準である。スレッド生成やスレッド操作の API を定義している。

POSIXスレッド標準を実装したライブラリPthreads と呼ばれることが多い。Pthreads は主にUnix系POSIXシステム(LinuxSolaris)で使われているが、Microsoft Windows 用実装も存在する。例えば、pthreads-w32 は Pthreads の API のサブセットをサポートしている[1]

目次

[編集] 内容

Pthreads はC言語のデータ型、関数、定数を定義している。その実装は pthread.h というヘッダファイルとスレッドライブラリにある。

データ型:

  • pthread_t: スレッドへのハンドル
  • pthread_attr_t: スレッド属性

スレッド操作関数(引数は省略):

  • pthread_create(): スレッド生成
  • pthread_exit(): 現在のスレッドを終了
  • pthread_cancel(): 指定したスレッドの実行をキャンセル
  • pthread_join(): 現在のスレッドを他のスレッドが終了するまでブロック
  • pthread_attr_init(): スレッド属性を初期化
  • pthread_attr_setdetachstate(): datachstate属性(スレッドがjoinできるかどうか)をセット
  • pthread_attr_getdetachstate(): detachstate属性をゲット
  • pthread_attr_destroy(): スレッド属性の破棄
  • pthread_kill(): スレッドへのシグナル送信

同期関数: mutexと条件変数

  • pthread_mutex_init(): mutexロックの初期化
  • pthread_mutex_destroy(): mutexロックの破棄
  • pthread_mutex_lock(): mutexロックの獲得(ブロックあり)
  • pthread_mutex_trylock(): mutexロックの獲得(ブロックしない)
  • pthread_mutex_unlock(): mutexロックの解放
  • pthread_cond_init(): 条件変数の初期化
  • pthread_cond_destroy(): 条件変数の破棄
  • pthread_cond_signal(): 条件変数のシグナル
  • pthread_cond_wait(): 条件変数で待つ

スレッドローカルデータ:

  • pthread_key_create(): スレッドローカルデータと関連付けるキーを生成
  • pthread_setspecific(): キーとスレッドローカルデータの関連付け
  • pthread_getspecific(): キーを指定してスレッドローカルデータを検索
  • pthread_key_delete(): キーの破棄

ユーティリティ関数:

  • pthread_equal(): 2つのスレッドIDが等しいかどうかを調べる
  • pthread_detach(): スレッドにリソースを解放させる
  • pthread_self(): 自身のスレッドIDを得る

[編集]

C言語で Pthreads を使ったコード例を示す。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
 
static void wait(void)
{
    time_t start_time = time(NULL);
 
    while (time(NULL) == start_time)
    {
        /* 最大1秒間CPUスライスを消費するだけで、何もしない */
    }
}
 
static void *thread_func(void *vptr_args)
{
    int i;
 
    for (i = 0; i < 20; i++)
    {
        fputs("  b\n", stderr);
        wait();
    }
 
    return NULL;
}
 
int main(void)
{
    int i;
    pthread_t thread;
 
    if (pthread_create(&thread, NULL, thread_func, NULL) != 0)
    {
        return EXIT_FAILURE;
    }
 
    for (i = 0; i < 20; i++)
    {
        fputs("a\n", stdout);
        wait();
    }
 
    if (pthread_join(thread, NULL) != 0)
    {
        return EXIT_FAILURE;
    }
 
    return EXIT_SUCCESS;
}

このプログラムは、'b' を表示する新たなスレッドを生成し、同時にメインスレッドは 'a' を表示する。出力は、2つのスレッドが並行動作することで 'a' と 'b' が入り混じったものになる。

[編集] 関連項目

[編集] 参考文献

  • David R. Butenhof: Programming with POSIX Threads, Addison-Wesley, ISBN 0-201-63392-2
  • Bradford Nichols, Dick Buttlar, Jacqueline Proulx Farell: Pthreads Programming, O'Reilly & Associates, ISBN 1-56592-115-1
  • Charles J. Northrup: Programming with UNIX Threads, John Wiley & Sons, ISBN 0-471-13751-0
  • Kay A. Robbins and Steven Robbins, UNIX Systems Programming, Prentice-Hall, ISBN 0-13-042411-0

[編集] 脚注

  1. ^ Pthread Win-32

[編集] 外部リンク


最終更新 2009年9月16日 (水) 17:45 (日時は個人設定で未設定ならばUTC)。
【POSIXスレッド】変更履歴

ご利用上の注意