Linuxプログラム設計——POSIXスレッド(一)
スレッド(thread)はプロセス内部の制御シーケンスです.すべてのプロセスには少なくとも1つの実行スレッドがあります.
スレッドのほとんどの関数名はpthread_です.先頭には、ヘッダファイルが含まれ、プログラムをコンパイルするときにオプション-lpthreadを追加します.
スレッド関数:
1.正常に0を返し、エラー・コードを返す新しいスレッドを作成します.
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
2.スレッドを終了し、オブジェクトを指すポインタ(関数のローカルオブジェクトではない)を返します.
void pthread_exit(void *retval);
3.メインスレッドはサブスレッド情報を収集し、この関数呼び出しは正常に0を返し、エラーコードを返すことに失敗した.この関数は、サブスレッドが終了するまで返されません.
int pthread_join(pthread_t th, void **thread_return);
簡単なスレッドthread 1.c:
スレッドのプロパティ:
4.スレッド属性オブジェクトを初期化します.この関数呼び出しは正常に0を返し、エラーコードを返すことに失敗しました.
int pthread_attr_init(pthread_attr_t *attr);
5.属性オブジェクトをクリーンアップして回収する回収関数.回収後に再初期化してから再利用する必要がある
int pthread_attr_destroy(pthread_attr_t *attr);
スレッドのほとんどの関数名はpthread_です.先頭には、ヘッダファイルが含まれ、プログラムをコンパイルするときにオプション-lpthreadを追加します.
スレッド関数:
1.正常に0を返し、エラー・コードを返す新しいスレッドを作成します.
int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);
2.スレッドを終了し、オブジェクトを指すポインタ(関数のローカルオブジェクトではない)を返します.
void pthread_exit(void *retval);
3.メインスレッドはサブスレッド情報を収集し、この関数呼び出しは正常に0を返し、エラーコードを返すことに失敗した.この関数は、サブスレッドが終了するまで返されません.
int pthread_join(pthread_t th, void **thread_return);
簡単なスレッドthread 1.c:
#include
#include
#include
#include
#include
void *thread_function(void *arg);
char message[] = "Hello World";
int main() {
int res;
pthread_t a_thread;
void *thread_result;
//
res = pthread_create(&a_thread, NULL, thread_function, (void *)message);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
printf("Waiting for thread to finish...
");
//
res = pthread_join(a_thread, &thread_result);
if (res != 0) {
perror("Thread join failed");
exit(EXIT_FAILURE);
}
printf("Thread joined, it returned %s
", (char *)thread_result);
printf("Message is now %s
", message);
exit(EXIT_SUCCESS);
}
void *thread_function(void *arg) {
printf("thread_function is running. Argument was %s
", (char *)arg);
sleep(3);
strcpy(message, "Bye!");
pthread_exit("Thank you for the CPU time");
}
スレッドのプロパティ:
4.スレッド属性オブジェクトを初期化します.この関数呼び出しは正常に0を返し、エラーコードを返すことに失敗しました.
int pthread_attr_init(pthread_attr_t *attr);
5.属性オブジェクトをクリーンアップして回収する回収関数.回収後に再初期化してから再利用する必要がある
int pthread_attr_destroy(pthread_attr_t *attr);