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:
#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);