進程:進程是資源管理的最小單位html
線程:線程是程序執行的最小單位編程
由於進程開銷大,才衍生出線程緩存
一個進程至少須要一個線程做爲它的指令執行體,進程管理着資源(好比cpu、內存、文件等等), 而將線程分配到某個cpu上執行多線程
新的執行線程將擁有本身的棧,但與它的建立者共享全局變量、文件描述符、信號處理函數和當前目錄狀態函數
特色:線程
使用 pthread_create 建立線程指針
使用 int pthread_attr_destroy(pthread_attr_t *attr); 函數來銷燬一個線程屬性對象code
使用 pthread_attr_init() 函數能夠初始化線程對象的屬性htm
使用 pthread_join() 等待線程結束對象
使用 pthread_detach() 來設置線程爲分離狀態
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
typedef struct{ int etachstate; //線程的分離狀態 int schedpolicy; //線程調度策略 structsched_param schedparam; //線程的調度參數 int inheritsched; //線程的繼承性 int scope; //線程的做用域 size_t guardsize; //線程棧末尾的警惕緩衝區大小 int stackaddr_set; //線程的棧設置 void* stackaddr; //線程棧的位置 size_t stacksize; //線程棧的大小 }pthread_attr_t;
API | 說明 |
---|---|
pthread_attr_init() | 初始化一個線程對象的屬性 |
pthread_attr_destroy() | 銷燬一個線程屬性對象 |
pthread_attr_getaffinity_np() | 獲取線程間的CPU親緣性 |
pthread_attr_setaffinity_np() | 設置線程的CPU親緣性 |
pthread_attr_getdetachstate() | 獲取線程分離狀態屬性 |
pthread_attr_setdetachstate() | 修改線程分離狀態屬性 |
pthread_attr_getguardsize() | 獲取線程的棧保護區大小 |
pthread_attr_setguardsize() | 設置線程的棧保護區大小 |
pthread_attr_getscope() | 獲取線程的做用域 |
pthread_attr_setscope() | 設置線程的做用域 |
pthread_attr_getstack() | 獲取線程的堆棧信息(棧地址和棧大小) |
pthread_attr_setstack() | 設置線程堆棧區 |
pthread_attr_getstacksize() | 獲取線程堆棧大小 |
pthread_attr_setstacksize() | 設置線程堆棧大小 |
pthread_attr_getschedpolicy() | 獲取線程的調度策略 |
pthread_attr_setschedpolicy() | 設置線程的調度策略 |
pthread_attr_setschedparam() | 獲取線程的調度優先級 |
pthread_attr_getschedparam() | 設置線程的調度優先級 |
pthread_attr_getinheritsched() | 獲取線程是否繼承調度屬性 |
pthread_attr_getinheritsched() | 設置線程是否繼承調度屬性 |
#include <pthread.h>
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
函數來銷燬一個線程屬性對象
在任何一個時間點上,線程是可結合的(joinable),或者是分離的(detached)
線程的分離狀態決定一個線程以什麼樣的方式來終止本身
默認狀態下是 非分離狀態
函數:
int pthread_join(pthread_t tid, void **rval_ptr);
int pthread_detach(pthread_t tid);
#include <pthread.h>
在非分離狀態下:
在分離狀態下:
若是在建立線程時就知道不須要了解線程的終止狀態,則能夠 pthread_attr_t 結構中的 detachstate 線程屬性,讓線程以分離狀態啓動
pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)
函數來設置線程分離狀態
獲取某個線程的分離狀態
int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);
函數獲取線程的分離狀態注意:
POSIX 標準指定了三種調度策略:
與調度相關的API
int pthread_attr_setinheritsched(pthread_attr_t *attr, int inheritsched); int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inheritsched); int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy); int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
int sched_get_priority_max(int policy); int sched_get_priority_min(int policy);
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param); int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize); int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *stacksize);
void pthread_exit(void *retval);
函數* 野火