12.6 线程属性

线程可以经过更多高级内容的设置,可以控制的属性很多;

前面的例子中,我们在程序退出之前用了pthread_join 对线程再次同步,如果我们想让线程向创建它的线程返回数据就需要这个函数。
但是有的时候,有可能我们不需要这些函数返回给主线程信息,也不想让主线程等待它的结束。(ios经常会出现了几秒中之后执行某个程序,应该就是没有返回给主线程任何消息)

现实假设: 假设我们给主线程继续为用户提供服务的同时创建第二个线程,新线程的作用是用户在编辑数据的文件-进行备份存储。备份工作结束后,第二个线程就可以直接终止了,没有必要再回到主线程中。
=====> 我们可以创建这一类型的线程,它们被称为脱离线程(detached thread)。
可以通过(1)修改线程属性或(2)调用pthread_detach 的方法来创建它们。
头文件: pthread.h
int pthread_attr_init(pthread_attr_t *attr); 初始化, 成功返回0,
int pthread_attr_destroy(pthread_attr_t *); 目的是对属性对象进行清理和回收。一旦对象被回收,除非重新初始化,否则不能够再次被调用了。
初始化一个线程属性对象后,我们可以调用线程属性的很多对象来设置属性行为。

int pthread_attr_destroy(pthread_attr_t *);
int pthread_attr_getdetachstate(const pthread_attr_t *, int *);
int pthread_attr_getguardsize(const pthread_attr_t * __restrict, size_t * __restrict);
int pthread_attr_getinheritsched(const pthread_attr_t * __restrict, int * __restrict);
int pthread_attr_getschedparam(const pthread_attr_t * __restrict,
struct sched_param * __restrict);
int pthread_attr_getschedpolicy(const pthread_attr_t * __restrict, int * __restrict);
int pthread_attr_getscope(const pthread_attr_t * __restrict, int * __restrict);
int pthread_attr_getstack(const pthread_attr_t * __restrict,
void * _Nullable * _Nonnull __restrict, size_t * __restrict);
int pthread_attr_getstackaddr(const pthread_attr_t * __restrict,
void * _Nullable * _Nonnull __restrict);
int pthread_attr_getstacksize(const pthread_attr_t * __restrict, size_t * __restrict);
int pthread_attr_init(pthread_attr_t *);
int pthread_attr_setdetachstate(pthread_attr_t *, int);
int pthread_attr_setguardsize(pthread_attr_t *, size_t);
int pthread_attr_setinheritsched(pthread_attr_t *, int);
int pthread_attr_setschedparam(pthread_attr_t * __restrict,
const struct sched_param * __restrict);
int pthread_attr_setschedpolicy(pthread_attr_t *, int);
int pthread_attr_setscope(pthread_attr_t *, int);
int pthread_attr_setstack(pthread_attr_t *, void *, size_t);
int pthread_attr_setstackaddr(pthread_attr_t *, void *);
int pthread_attr_setstacksize(pthread_attr_t *, size_t);
可以看到可以设置属性的属性很多的。😀 ,下面是一个常用的设置:
(1)detachedstate : 这个属性允许我们无需对线程进行重新合并。与大多数set类函数一样。它以一个属性指针和一个标志位参数来确定需要的状态。pthread_attr_setdetachstate 函数可能用到的两个标志分别是PTHREAD_CREATE_JOINABLE 和 PTHREAD_CREATE_DETACHED. 这个属性的默认标志值是PTHREAD_CREATE,而JOINABLE ,所以,可以允许两个线程重新合并。如果表示设置为PTHREAD_CREATE_DETACHED,就不能调用pthread_join 来获得另外一个线程的退出状态。
(2)schedpolicy : 这个属性控制线程的调度方式。取值可以是:SCHED_OTHE、SCHED_RP 和SCHED_FIFO。 这个属性的默认值为SHCED_OTHER .另外两中调度方式只能用于超级用于权限运行的进程,因为它们都具备实时调度的功能,但在行为上略有区别。SCHED_RP 使用循环(round-robin) 调度机制。而schedpolicy 使用"先进先出策略"。
(3)schedparam : 这个属性是和schedpolicy 属性结合使用的,它可以对以SCHED_OTHER 策略运行的线程的调度进行控制。
(4)inheritsched : 这个属性可以取两个值:PTHREAD_EXPLICIT_SCHED 和PTHREAD_INHERIT_SCHED .它的默认取值是PTHEAD_EXPLICTT_SCHED. 表示调度由属性明确地设置。如果把它设置为PTHREAD_INHERIT_SCHED ,新线程将沿用其创建者所使用的参数。
(5)scope: 这属性控制一个线程调度的计算方式。由于目前Linux只是支持PTHREAD_SCOPE_SYSTEM ,。
(6)stacksize : 这个属性控制线程创建的栈大小,单位为字节。它属于POSIX 规范中的“可选”部分,只有在定义了宏_POSIX_THREAD_ATTR_STTACKSIZE 实现版本才会支持。linux实现线程时,默认使用的栈很大。所以这个功能对linux俩说显得有点多余。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容