使用pthread库进行多线程编程2 - UNIX高级环境编程第12章读书笔记

12 Thread Control

1 Thread Limits

sysconf函数可以获得和thread相关的一些系统信息,主要是线程相关的一些最大值:

NAME

Description

Argument

PTHREAD_DESTRUCTOR_ITERATIONS

最大尝试销毁线程相关数据(Thread Specific Data)的次数,见下面关于Thread-Specific Data的内容

_SC_THREAD_DESTRUCTOR_ITERATIONS

PTHREAD_KEYS_MAX

一个进程所能够创建的最大键数

_SC_THREAD_KEYS_MAX

PTHREAD_STACK_MIN

线程栈的最小值

_SC_THREAD_STACK_MIN

PTHREAD_THREADS_MAX

单个进程中的线程个数最大值

_SC_THREAD_THREADS_MAX

 

部分概念在后面会提到。

虽然标准定义了这些常量,不过在很多系统上面可能根本就没有定义对应的Argument(如_SC_THREAD_DESTRUCTOR_ITERATIONS可能未定义),或者sysconf函数返回错误。因此在很多时候这些很难派上用场。

2 Thread Attributes

在前面讲到pthread_create等函数的时候,这些函数有一个参数pthread_attr_t。缺省情况下可以传NULL。但是如果想自己定义线程的相关属性的话,应该调用pthread_attr_init函数来定义:

#include <pthread.h>

 

int pthread_attr_init(pthread_attr_t *attr);

 

int pthread_attr_destroy(pthread_attr_t *attr);

 

返回0表示正常,出错时返回错误值

pthread_attr_init函数负责初始化pthread_attr_t结构为缺省值。pthread_attr_destroy负责释放在pthread_attr_init函数调用时分配的内存,同时将pthread_attr的内容置为非法。如果要修改属性,需要调用其他函数来手动设置。

基本的线程属性如下:

Name

Description

detachstate

detached状态,在前一章中有讲述

guardsize

线程栈底部的Guard缓冲区的大小

stackadddr

线程栈的最低地址

stacksize

线程栈的大小

1.     Detached State:一个线程如果出于Detached状态,说明此线程在退出的时候可以立刻释放其资源和对应的结束代码,从而无法使用pthread_join。可以用pthread_attr_setdetachedstate函数来设置Detach状态。传入PTHREAD_CREATE_DETACHED可以让线程启动的时候就处于Detached状态,而传入PTHREAD_CREATE_JOINABLE则是以通常状态启动线程

#include <pthread.h>

 

int pthread_attr_getdetachedstate(const pthread_attr_t *restrict attr, int *detachstate);

 

int pthread_attr_setdetachedstate(pthread_attr_t *restrict attr, int detachstate);

 

返回0表示正常,出错时返回错误值

 

2.     GuardSize:在线程栈的末尾有一个比较小的内存区域,这个内存区域是保护起来的,一旦栈发生overflow,系统立刻就会知道,发送一个SignalWindows也有类似的功能,只不过是用于自动增长栈的大小)。缺省情况下这个大小正好是一个页=PAGESIZE。甚至可以用函数将该数值设置为0

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值