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

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

内容

Pthreads はC言語のデータ型、関数、定数を定義している。その実装は pthread.h というヘッダファイルとスレッドライブラリにある。スレッドのスリープは unistd.h の sleep() もしくは time.h の nanosleep() を使用する。

データ型:

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

同期関数: mutex

同期関数: 条件変数

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

Read/Writeロック

ユーティリティ関数:

例

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

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

static void *thread_func(void *vptr_args) {
    int i;

    for (i = 0; i < 20; i++) {
        fputs("  b\n", stderr);
        sleep(1);
    }

    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++) {
        puts("a");
        sleep(1);
    }

    if (pthread_join(thread, NULL) != 0) {
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}

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

関連項目

参考文献

脚注

  1. ↑ POSIX Threads (pthreads) for Win32

外部リンク

⌬ Phoenix Mesh CID: 未登録 IPFS未登録 📡 0ピア N=1 CRITICAL PQS D23