77范文网 - 专业文章范例文档资料分享平台

linux多线程编程(4)

来源:网络收集 时间:2019-02-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

int main(int argc,char *argv[ ]) { pthread_t child_thread_id; pthread_create(&child_thread_id,NULL,child_thread,NULL); pthread_join(child_thread_id,NULL); }

六、线程的作用域

函数pthread_attr_setscope和pthread_attr_getscope分别用来设置和得到线程的作用域,这两个函数的定义如下: 7. 名称:: pthread_attr_setscope pthread_attr_getscope 功能: 获得/设置线程的作用域 头文件: #include 函数原形: int pthread_attr_setscope(pthread_attr_t *attr,int scope); int pthread_attr_getscope(const pthread_attr_t *attr,int *scope); 参数: attr 线程属性变量 scope 线程的作用域 返回值: 若成功返回0,若失败返回-1。

这两个函数具有两个参数,第1个是指向属性对象的指针,第2个是作用域或指向作用域的指针,作用域控制线程是否在进程内或在系统级上竞争资源,可能的值是PTHREAD_SCOPE_PROCESS(进程内竞争资源)PTHREAD_SCOPE_SYSTEM.(系统级上竞争资源)。

七、线程堆栈的大小

函数pthread_attr_setstacksize和pthread_attr_getstacksize分别用来设置和得到线程堆栈的大小,这两个函数的定义如下所示: 8. 名称:: pthread_attr_getdetstacksize pthread_attr_setstacksize 功能: 获得/修改线程栈的大小 头文件: #include 函数原形: int pthread_attr_getstacksize(const pthread_attr_t *restrict attr,size_t *restrict stacksize); int pthread_attr_setstacksize(pthread_attr_t *attr ,size_t 参数: 返回值:

*stacksize); attr 线程属性变量 stacksize 堆栈大小 若成功返回0,若失败返回-1。 这两个参数具有两个参数,第1个是指向属性对象的指针,第2个是堆栈大小或指向堆栈大小的指针

如果希望改变栈的默认大小,但又不想自己处理线程栈的分配问题,这时使用pthread_attr_setstacksize函数就非常用用。

八、线程堆栈的地址

函数pthread_attr_setstackaddr和pthread_attr_getstackaddr分别用来设置和得到线程堆栈的位置,这两个函数的定义如下: 9. 名称:: pthread_attr_setstackaddr pthread_attr_getstackaddr 功能: 获得/修改线程栈的位置 头文件: #include 函数原形: int pthread_attr_getstackaddr(const pthread_attr_t *attr,void **stackaddf); int pthread_attr_setstackaddr(pthread_attr_t *attr,void *stackaddr); 参数: attr 线程属性变量 stackaddr 堆栈地址 返回值: 若成功返回0,若失败返回-1。

这两个函数具有两个参数,第1个是指向属性对象的指针,第2个是堆栈地址或指向堆栈地址的指针。

九、线程栈末尾的警戒缓冲区大小

函数pthread_attr_getguardsize和pthread_attr_setguardsize分别用来设置和得到线程栈末尾的警戒缓冲区大小,这两个函数的定义如下: 10. 名称:: pthread_attr_getguardsize pthread_attr_setguardsize 功能: 获得/修改线程栈末尾的警戒缓冲区大小 头文件: #include 函数原形: int pthread_attr_getguardsize(const pthread_attr_t *restrict attr,size_t *restrict guardsize); int pthread_attr_setguardsize(pthread_attr_t *attr ,size_t *guardsize); 参数: 返回值: 若成功返回0,若失败返回-1。

线程属性guardsize控制着线程栈末尾之后以避免栈溢出的扩展内存大小。这个属性默认设置为PAGESIZE个字节。可以把guardsize线程属性设为0,从而不允许属性的这种特征行为发生:在这种情况下不会提供警戒缓存区。同样地,如果对线程属性stackaddr作了修改,系统就会假设我们会自己管理栈,并使警戒栈缓冲区机制无效,等同于把guardsize线程属性设为0。

第三章 Posix有名信号灯

函数sem_open创建一个新的有名信号灯或打开一个已存在的有名信号灯。有名信号灯总是既可用于线程间的同步,又可以用于进程间的同步。

一、posix有名信号灯函数 1. 名称:: sem_open 功能: 创建并初始化有名信号灯 头文件: #include 函数原形: sem_t *sem_open(const char *name,int oflag,/*mode_t mode,unsigned int value*/); 参数: name 信号灯的外部名字 返回值:

oflag 选择创建或打开一个现有的信号灯 mode 权限位 value 信号灯初始值 成功时返回指向信号灯的指针,出错时为SEM_FAILED oflag参数可以是0、O_CREAT(创建一个信号灯)或O_CREAT|O_EXCL(如果没有指定的信号灯就创建),如果指定了O_CREAT,那么第三个和第四个参数是需要的;其中mode参数指定权限位,value参数指定信号灯的初始值,通常用来指定共享资源的书面。该初始不能超过SEM_VALUE_MAX,这个常值必须低于为32767。二值信号灯的初始值通常为1,计数信号灯的初始值则往往大于1。

如果指定了O_CREAT(而没有指定O_EXCL),那么只有所需的信号灯尚未存在时才初始化它。所需信号灯已存在条件下指定O_CREAT不是一个错误。该标志的意思仅仅是“如果所需信号灯尚未存在,那就创建并初始化它”。但是所需信号灯等已存在条件下指定O_CREAT|O_EXCL却是一个错误。 sem_open返回指向sem_t信号灯的指针,该结构里记录着当前共享资源的数目。 /*semopen.c*/ #include #include #include #include #include int main(int argc,char **argv) { sem_t *sem; if(argc!=2) { printf(“please input a file name!\\n”); exit(1); } sem=sem_open(argv[1],O_CREAT,0644,1); exit(0); } #gcc –lpthread –o semopen semopen.c #./semopen 2. 名称:: sem_close 功能: 关闭有名信号灯 头文件: 函数原形: 参数: 返回值:

#include int sem_close(sem_t *sem); sem 指向信号灯的指针 若成功则返回0,否则返回-1。 一个进程终止时,内核还对其上仍然打开着的所有有名信号灯自动执行这样的信号灯关闭操作。不论该进程是自愿终止的还是非自愿终止的,这种自动关闭都会发生。

但应注意的是关闭一个信号灯并没有将它从系统中删除。这就是说,Posix有名信号灯至少是随内核持续的:即使当前没有进程打开着某个信号灯,它的值仍然保持。 3. 名称:: sem_unlink 功能: 从系统中删除信号灯 头文件: #include 函数原形: int sem_unlink(count char *name); 参数: Name 信号灯的外部名字 返回值: 若成功则返回0,否则返回-1。

有名信号灯使用sem_unlink从系统中删除。

每个信号灯有一个引用计数器记录当前的打开次数,sem_unlink必须等待这个数为0时才能把name所指的信号灯从文件系统中删除。也就是要等待最后一个sem_close发生。 /*semunlink.c*/ #include #include #include #include #include int main(int argc,char **argv) { sem_t *sem; int val; if(argc!=2) { printf(“please input a file name!\\n”); exit(1); } if((sem_unlink(argv[1]))!=0)

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库linux多线程编程(4)在线全文阅读。

linux多线程编程(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/476124.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: