#include "stdafx.h" #include <pthread.h> #include <stdio.h> void * thread_routine(void*arg); void * thread_routine(void*arg) { return arg; } int main(int argc, _TCHAR *argv[]) { pthread_t thread_id; void *thread_result; int status; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); // 這個屬性說明了線程是如何結束的 // PTHREAD_CREATE_JOINABLE 同步結束 需要pthread_join // PTHREAD_CREATE_DETACHED 異步結束 pthread_join沒有作用 status = pthread_create(&thread_id, &attr, thread_routine, NULL); if (status != 0) { perror("pthread_create eror\n"); } status = pthread_join(thread_id, &thread_result); if (status != 0) { perror("join pthread \n"); } printf("status is %d thread_result is %p\n", status,thread_result); if (thread_result == NULL) { while (1); return 0; } else { while (1); return 1; } while (1); }
大佬說 : fork 和 join 一對詞
pthread_join : wait意思 等待資源 被釋放 還有一個好處就是被等待的線程應該將返回值或任何其他信息保存在某個公共位置,並將條件變量廣播給所有在其上等待的線程
以喚醒他們。
enum { /* * pthread_attr_{get,set}detachstate */ PTHREAD_CREATE_JOINABLE = 0, /* Default */ PTHREAD_CREATE_DETACHED = 1, /* * pthread_attr_{get,set}inheritsched */ PTHREAD_INHERIT_SCHED = 0, PTHREAD_EXPLICIT_SCHED = 1, /* Default */ /* * pthread_{get,set}scope */ PTHREAD_SCOPE_PROCESS = 0, PTHREAD_SCOPE_SYSTEM = 1, /* Default */ /* * pthread_setcancelstate paramters */ PTHREAD_CANCEL_ENABLE = 0, /* Default */ PTHREAD_CANCEL_DISABLE = 1, /* * pthread_setcanceltype parameters */ PTHREAD_CANCEL_ASYNCHRONOUS = 0, PTHREAD_CANCEL_DEFERRED = 1, /* Default */ /* * pthread_mutexattr_{get,set}pshared * pthread_condattr_{get,set}pshared */ PTHREAD_PROCESS_PRIVATE = 0, PTHREAD_PROCESS_SHARED = 1, /* * pthread_barrier_wait */ PTHREAD_BARRIER_SERIAL_THREAD = -1 };
PTHREAD_CREATE_JOINABLE: 一個沒有被分離的線程終止時會保留其虛擬內存,包括他們的堆棧和其他系統資源。
PTHREAD_CREATE_DETACHED:分離線程意味着通知系統不再需要此線程,允許系統將分配給它的資源回收。