设置进程绑定状态的函数pthread_attr_setscope
pthread_attr_t 指向属性结构的指针
第二个参数 绑定类型 pthread_scope_system()
pthread_scope_process(非绑定)
创建一个绑定线程
线程属性结构
pthread_attr_t
#include <pthread.h>
pthread_attr_t attr;
pthread_t tid;//线程标识符id
//初始化属性值,均设为默认值
//代码创建绑定线程
//初始化线程属性,均设为默认值
pthread_attr_init(&attr);
pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);设置线程绑定状态函数
pthread_scope_system(绑定)
pthread_scope_process(非绑定的)
pthread_create(&tid,&attr,(void *)my_function,NULL);
线程是否绑定 决定影响线程的响应速度
线程分离状态 决定一个线程以什么样的方式终止
线程分离状态决定线程什么方式终止自己
线程的默认属性 非分离状态
非分离状态下,原有的线程等待创建的线程结束
pthread_join等待线程结束
原有的线程等待创建的线程结束,只有当pthread_join()函数返回 创建的
线程才算结束 才能释放自己占用系统资源
分离线程不是這个样子 没有被其它的线程所等待 分离线程 没有被其它线程等待
自己运行结束了 ,线程 就终止 了
马上释放系统资源
设置线程分离状态函数pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);
第二个参数为pthread_attr_setdetachstate()
pthread_create_detached
pthread_create_joinable
如果设置一个线程为分离线程 而线程运行又非常快
很可能此线程在pthread_create函数返回之前就终止了
终止以后就有可能将线程号和系统资源移交给其它的线程使用
這样调用pthread_create的线程就得到了错误的线程号
避免这种情况采取一定的同步措施
在被创建的线程里面调用pthread_cond_timewait
让线程等待一会
留出足够的时间让函数pthread_create返回
设置一段等待时间,是在多线程编程里面常用的方法
不能使用wait() wait使整个进程睡眠,并不能解决线程同步问题
属性 线程优先级priority 存在于结构 sched_param
pthread_attr_getschedparam
pthread_attr_setschedparam
一般来说我们总是先取优先级,对取得值进行修改后再存放回去
线程的属性优先级sched_param
sched.h sched_param
pthread_attr_getschedparam
pthread_attr_setschedparam
sched_param sched.h
#include <pthread.h>
#include <sched.h>
pthread_attr_t attr;
pthread_t tid;
sched_param param;
int newprio = 20;
pthread_attr_init(&attr);//
pthread_attr_getschedparam(&attr,¶m);
param.sched_priority = newprio;
pthread_attr_setschedparam(&attr,¶m);
pthrea_create(&tid,&attr,(void *)myfunction,myarg);
线程的数据处理
和进程相比 线程的最大优点之一 数据共享性
各个线程共享进程处沿袭的数据段,可以方便的获取,修改数据
线程的数据共享性在带来方便性的同事 也给多线程编程带来了问题
我们必须当心有多个不同的进程访问相同的变量
线程数据处理
线程的数据处理
线程
函数中
线程中共享的变量必须用关键字volatile定义 防止编译器在 gcc -OX
防止编译器在优化时改变了使用方式
为了保护变量 我们必须使用信号量 signal metux 保证对变量正确使用
线程数据
单线程程序 两种基本数据
global variable local variable;
多线程程序中 第三种数据类型
tsd thread-specific data
和全局变量象
线程内部 各个函数可以像使用全局变量一样调用
线程数据
为每个线程创建一个建 线程和建相关联
在各个线程路面 都使用這个建来指代线程数据 在不同的线程里
和线程数据相关的函数
创建建 为一个键指定线程数据
从一个键读取线程数据 删除键
volatile 保护变量 使用信号量 互斥 保证我们对变量的正确使用
线程数据
单线程程序里面 两种基本的数据 全局 变量 局部变量
多线程 有三种 数据类型
线程数据thread_specific da ta
线程数据和全局变量很像
线程内部 各个函数可以像使用全局变量一样调用 对线程外部的其他线程 不可见 数据的必要性
errno
errno 线程变量
线程数据
线程数据创建建 线程和建相关联在各个线程里都使用键指代线程数据
在不同的线程 键指代的数据不同 在同一个线程里 代表同样的数据
线程数据只在线程内部;
实现线程数据变量 ,需要为每个线程创建键 线程再和建关联
各个线程里都使用键代指线程数据