PTHREAD_SPECIFIC(3) | FreeBSD Library Functions Manual | PTHREAD_SPECIFIC(3) |
名前
pthread_key_create, pthread_key_delete, pthread_setspecific, pthread_getspecific -スレッド固有データの管理書式
#include <pthread.h>説明
プログラムではスレッドごとに値の異なるグローバル変数や静的変数がしばしば必要となる。複数のスレッドは 1 つのメモリ空間を共有するため、通常の変数ではこれを実現することができない。スレッド固有データは、この必要性への POSIX スレッドの答えである。返り値
pthread_key_create および pthread_key_delete 、 pthread_setspecific は成功すると 0 を、失敗すると非 0 のエラーコードを返す。成功の場合、 pthread_key_create は新しく確保されたキーを引数 key で指し示される領域に格納する。エラー
pthread_key_create はエラーの場合に次のようなエラーコードを返す:- EAGAIN
- PTHREAD_KEYS_MAX だけのキーがすでに確保されている。
- EINVAL
- key は有効な、確保された TSD キーではない。
著者
Xavier Leroy <Xavier.Leroy@inria.fr>関連項目
pthread_create(3), pthread_exit(3), pthread_testcancel(3).例
次のコードでは、100 バイトのスレッド固有の配列を確保し、スレッドの終了とともに自動で解放する:/* スレッド固有バッファのキー */
static pthread_key_t buffer_key;
/* 1 回限りのキーの初期化 */
static pthread_once_t buffer_key_once = PTHREAD_ONCE_INIT;
/* スレッド固有のバッファを確保する */
void buffer_alloc(void)
{
pthread_once(&buffer_key_once, buffer_key_alloc);
pthread_setspecific(buffer_key, malloc(100));
}
/* スレッド固有のバッファを返す */
char * get_buffer(void)
{
return (char *) pthread_getspecific(buffer_key);
}
/* キーを確保する */
static void buffer_key_alloc()
{
pthread_key_create(&buffer_key, buffer_destroy);
}
/* スレッド固有のバッファを解放する */
static void buffer_destroy(void * buf)
{
free(buf);
}
LinuxThreads |