POSIXスレッド

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

**内容**
Pthreads はC言語のデータ型、関数、定数を定義している。その実装は  pthread.h というヘッダファイルとスレッドライブラリにある。スレッドのスリープは  unistd.h の sleep() もしくは  time.h の nanosleep() を使用する。
データ型:- pthread_t: スレッドへのハンドル- pthread_attr_t: スレッド属性- pthread_mutex_t: mutex- pthread_mutexattr_t: mutex の属性- pthread_cond_t: 条件変数- pthread_condattr_t: 条件変数の属性
スレッド操作関数（引数は省略）:- pthread_create(): スレッド生成- pthread_exit(): 現在のスレッドを終了- pthread_cancel(): 指定したスレッドの実行をキャンセル- pthread_join(): 現在のスレッドを他のスレッドが終了するまでブロック- pthread_kill(): スレッドへのシグナル送信- pthread_attr_init(): スレッド属性を初期化- pthread_attr_destroy(): スレッド属性の破棄- pthread_attr_getdetachstate(): detachstate属性を取得- pthread_attr_setdetachstate(): datachstate属性（スレッドがjoinできるかどうか）を設定
同期関数: mutex- pthread_mutex_init(): mutexロックの初期化- pthread_mutex_destroy(): mutexロックの破棄- pthread_mutex_lock(): mutexロックの獲得（ブロックあり）- pthread_mutex_trylock(): mutexロックの獲得（ブロックしない）- pthread_mutex_unlock(): mutexロックの解放- pthread_mutex_getprioceiling():- pthread_mutex_setprioceiling():
同期関数: 条件変数- pthread_cond_init(): 条件変数の初期化- pthread_cond_destroy(): 条件変数の破棄- pthread_cond_signal(): 条件変数のシグナル- pthread_cond_broadcast():- pthread_cond_wait(): 条件変数で待つ- pthread_cond_timedwait(): - pthread_condattr_init(): - pthread_condattr_destroy(): - pthread_condattr_getpshared(): - pthread_condattr_setpshared(): 
スレッドローカルデータ:- pthread_key_create(): スレッドローカルデータと関連付けるキーを生成- pthread_key_delete(): キーの破棄- pthread_getspecific(): キーを指定してスレッドローカルデータを検索- pthread_setspecific(): キーとスレッドローカルデータの関連付け
Read/Writeロック- pthread_rwlock_init():- pthread_rwlock_destroy():- pthread_rwlock_rdlock():- pthread_rwlock_wrlock():- pthread_rwlock_tryrdlock():- pthread_rwlock_trywrlock():- pthread_rwlock_unlock():- pthread_rwlockattr_init():- pthread_rwlockattr_destroy():- pthread_rwlockattr_getpshared():- pthread_rwlockattr_setpshared():
ユーティリティ関数:- pthread_equal(): 2つのスレッドIDが等しいかどうかを調べる- pthread_detach(): スレッドにリソースを解放させる- pthread_self(): 自身のスレッドIDを得る

**例**
C言語で Pthreads を使ったコード例を示す。
#include 
#include 
#include 
static void *thread_func(void *vptr_args) {
int i;
for (i = 0; i 
このプログラムは、'b' を1秒ごとに20回表示する新たなスレッドを生成し、同時にメインスレッドは 'a' を1秒ごとに20回表示する。出力は、2つのスレッドが並行動作することで 'a' と 'b' が入り混じったものになる。

**関連項目**
 Native POSIX Thread Library (NPTL)

**参考文献**
 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

**脚注**

**外部リンク**
  POSIX Threads Programming-  C/C++ Tutorial: using Pthreads- " POSIX threads explained" by Daniel Robbins (Gentoo Linux founder)- インタビュー " Ten Questions with David Butenhof about Parallel Programming and POSIX Threads" by Michael Suess-  Open Source POSIX Threads for Win32-  The Open Group Base Specifications Issue 6, IEEE Std 1003.1-  GNU Portable threads-  Pthreads Presentation at 2007 OSCON (O'Reilly Open Source Convention) by Adrien Lamothe. Pthreads と最近の動向について