-
获取线程ID
pthread_t pthread_self(void);
- 返回当前线程ID
-
比较线程ID是否相等
int pthread_equal(pthread_t t1, pthread_t t2);
- 如果是同一线程返回0,不是-1
pthread_t
不一定是unsigned long
类型的,有些系统中是结构体类型,所以比用==
比较
-
线程终止
void pthread_exit(void *retval);
- 功能:调用者线程结束(从入口函数return,主函数也能退出)
retval
:会返回给pthread_join函数的第二个参数(返回值)- 注意:如果是进程的最后一个线程,当调用这个函数时也将退出。
-
线程分离和联合
-
非分离(联合态)线程可以被创建者调用pthread_join等待(回收资源)
-
分离,线程不可被调用者等待,线程结束后自动释放资源
int pthread_detach(pthread_t thread);
- 功能:使调用者线程与线程ID为thread的线程成为分离状态
- 例子
#include <stdio.h> #include <unistd.h> #include <pthread.h> void* start_run(void* arg) { char* str = "分手!";//生成在代码段 //char str[] = "dididi";生成在线程的栈,线程结束后数据销毁无法返回 return str; } int main( { pthread_t pid; pthread_create(&pid,NULL,start_run,NULL); void* ptr = NULL; pthread_detach(pid); pathread_join(pid,&ptr); printf("%s 不要\n",(char*)ptr);//不会有回应 }
-
-
线程的取消
int pthread_cancel(pthread_t thread);
- 功能:向指定线程发送结束信号,(对方不一定响应,不响应,不结束)
#include <stdio.h> #include <unistd.h> #include <pthread.h> void* start_run(void* arg) { while(1) { int pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); char* str = "分手!";//生成在代码段 printf("886\n"); } } int main( { pthread_t pid; pthread_create(&pid,NULL,start_run,NULL); void* ptr = NULL; pthread_cancel(pid); pathread_join(pid,&ptr);//只打印一句 }
int pthread_setcancelstate(int state, int *oldstate);
- 功能:设置当前调用者线程是否响应
oldstate
:获取旧的状态state
PTHREAD_CANCEL_ENABLE
:允许线程响应PTHREAD_CANCEL_DISABLE
:不允许线程响应
-
设置线程属性
typedef union { char __size[__SIZEOF_PTHREAD_T]; long int __align; }pthread_attr_t;
-
初始化一个线程对象的属性
int pthread_attr_init(pthread_attr_t *attr);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针
- 说 明:Posix线程中的线程属性
pthread_attr_t
主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。pthread_attr_init
实现时为属性对象分配了动态内存空间。
-
销毁一个线程属性对象
int pthread_attr_destroy(pthread_attr_t *attr);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针
- 说 明:经
pthread_attr_destroy
去除初始化之后的pthread_attr_t
结构被pthread_create
函数调用,将会导致其返回错误。
-
获取线程间的CPU亲缘性
int pthread_attr_getaffinity_np(pthread_attr_t *attr, size_t cpusetsize, cpu_set_t *cpuset);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针
- 说 明:获取线程的CPU亲缘属性
-
设置线程的CPU亲缘性
int pthread_attr_setaffinity_np(pthread_attr_t *attr, size_t cpusetsize, const cpu_set_t *cpuset);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针cpusetsize
指向CPU组的缓冲区大小cpuset
指向CPU组的指针
- 说 明:通过指定cupset来设置线程的CPU亲缘性
-
获取线程分离状态属性
int pthread_attr_getdetachstate(pthread_attr_t *attr, int *detachstate);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针detachstate
保存返回的分离状态属性
- 说 明:获取线程分离状态属性
-
修改线程分离状态属性
int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针detachstat
有两个取值
PTHREAD_CREATE_DETACHED
(分离)PTHREAD_CREATE_JOINABLE
(非分离)
- 说 明:Posix线程中的线程属性
pthread_attr_t
主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。
-
获取线程的栈保护区大小
int pthread_attr_getguardsize(pthread_attr_t *attr, size_t *guardsize);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针guardsize
返回获取的栈保护区大小
- 说 明:获取线程的栈保护区大小
-
设置线程的栈保护区大小
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针guardsize
线程的栈保护区大小
- 说 明:参数提供了对栈指针溢出的保护。默认为系统页大小如果设置为0表示没有保护区。大于0,则会为每个使用 attr 创建的线程提供大小至少为 guardsize 字节的溢出保护区
-
获取线程的作用域
int pthread_attr_getscope(pthread_attr_t *attr, int *scope);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针scope
返回线程的作用域
- 说 明:指定了作用域也就指定了线程与谁竞争资源
-
设置线程的作用域
int pthread_attr_setscope(pthread_attr_t *attr, int scope);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
att
r 指向一个线程属性的指针guardsize
线程的作用域,可以取如下值
PTHREAD_SCOPE_SYSTEM
与系统中所有进程中线程竞争PTHREAD_SCOPE_PROCESS
与当前进程中的其他线程竞争
- 说 明:指定了作用域也就指定了线程与谁竞争资源
-
获取线程的堆栈信息(栈地址和栈大小)
int pthread_attr_getstack(pthread_attr_t *attr, void **stackaddr, size_t *stacksize);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针stackaddr
返回获取的栈地址stacksize
返回获取的栈大小
- 说 明:获取线程的堆栈地址和大小
-
设置线程堆栈区
int pthread_attr_setstack(pthread_attr_t *attr, void *stackaddr, size_t stacksize);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针stackaddr
线程的堆栈地址:应该是可移植的,对齐页边距的(可以用posix_memalign
来进行获取)stacksize
线程的堆栈大小:应该是页大小的整数倍
- 说 明:设置堆栈区,将导致
pthread_attr_setguardsize
失效。
-
获取线程堆栈地址
int pthread_attr_getstackaddr(pthread_attr_t *attr, void **stackaddr);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针stackaddr
返回获取的栈地址
- 说 明:函数已过时,一般用
pthread_attr_getstack
来代替
-
设置线程堆栈地址
int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针stackaddr
设置线程堆栈地址
- 说 明:函数已过时,一般用
pthread_attr_setstack
来代替
-
获取线程堆栈大小
int pthread_attr_getstacksize(pthread_attr_t *attr, size_t *stacksize);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针stacksize
返回线程的堆栈大小
- 说 明:获取线程堆栈大小
-
设置线程堆栈大小
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针guardsize
线程的栈保护区大小:应该是页大小的整数倍
- 说 明:设置线程堆栈大小:
-
获取线程的调度策略
int pthread_attr_getschedpolicy(pthread_attr_t *attr, int *policy);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针policy
返回线程的调度策略
- 说 明:获取线程的调度策略
-
设置线程的调度策略
int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
指向一个线程属性的指针policy
线程的调度策略,有如下三种:
SCHED_FIFO
先入先出策略SCHED_RR
轮转调度,类似于 FIFO,但加上了时间轮片算法SCHED_OTHER
系统默认策略
- 说 明:设置线程的调度策略
-
获取线程的调度参数
- int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
- attr 指向一个线程属性的指针
-param 返回获取的调度参数,该结构仅有一个从参数,如下 - 说 明:获取线程的调度参数
-
设置线程的调度参数
int pthread_attr_getschedparam(pthread_attr_t *attr, struct sched_param *param);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
: 指向一个线程属性的指针param
: 要设置的调度参数- 说 明:设置线程的调度参数
-
获取线程是否继承调度属性
int pthread_attr_getinheritsched(pthread_attr_t *attr, int *inheritsched);
- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
: 指向一个线程属性的指针inheritsched
: 返回继承调度属性的设置- 说 明:获取线程是否继承调度属性
-
设置线程是否继承调度属性
int pthread_attr_setinheritsched(pthread_attr_t *attr, int *guardsize)
;- 返回值:若是成功返回0,否则返回错误的编号
- 形 参:
attr
: 指向一个线程属性的指针guardsize
: 设置线程是否继承调度属性PTHREAD_INHERIT_SCHED
:调度属性将继承于正创建的线程,attr中的设置将被忽略PTHREAD_EXPLICIT_SCHED
: 调度属性将被设置为attr中指定的属性值
- 使用方法
- 定义线程属性结构体
pthread_attr_t attr;
- 初始化属性结构体
pthread_attr_init(&attr);
- 使用设置线程属性的函数设置线程
- 在
pthread_create
函数的第二个参数中使用线程属性结构变量创建线程。
- 定义线程属性结构体
-
线程2
最新推荐文章于 2020-06-06 22:24:19 发布