pthread_createの最初の引数は、pthread_tポインターです。以下のhelloプログラムpthread_t*
で、最初の引数がpthread_t( )ではなくpthread_t()へのポインターである場合、プログラムは...pthread_t
で終了します。なぜですか?Segmentation fault
pthread_t*
の最初の引数の宣言された型として見たのを覚えていませんpthread_create
。そして、Butenhofの本Programming
withPOSIXThreadsの第2章は次のように述べています。
pthread_t
スレッドを作成するには、 [notpthread_t*
]型の変数を宣言する必要があります。
しかし、仕様によれば、の最初の引数pthread_create
はへのポインタです。それではpthread_t
、なぜセグメンテーション違反が発生するのでしょうか。
セグメンテーション違反
pthread_t* thr;
pthread_create(thr, NULL, &hello, NULL);
正常に実行
pthread_t thr;
pthread_t* pntr = &thr;
pthread_create(pntr, NULL, &hello, NULL);
こんにちはプログラム:
#include <pthread.h>
#include <stdio.h>
void *
hello(void *arg){
printf("Hello\n");
pthread_exit(NULL);
}
int
main(int argc, char **argv){
pthread_t thr = 1;
pthread_create(&thr, NULL, &hello, NULL);
pthread_join(thr, NULL);
return 0;
}
pthread_createプロトタイプ:
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void*), void *arg);