码迷,mamicode.com
首页 > 其他好文 > 详细

pthread条件变量属性

时间:2018-06-14 23:56:59      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:red   数据类型   内存不足   roc   proc   IV   attribute   初始   style   

一:条件变量属性

pthread_condattr_init 语法

int pthread_condattr_init(pthread_condattr_t *cattr);
#include <pthread.h>

pthread_condattr_t cattr;

int ret;

/* initialize an attribute to default value */

ret = pthread_condattr_init(&cattr); 

调用此函数时,pshared 属性的缺省值为 PTHREAD_PROCESS_PRIVATEpshared 的该值表示可以在进程内使用已初始化的条件变量。

cattr 的数据类型为 opaque,其中包含一个由系统分配的属性对象。cattr 范围可能的值为 PTHREAD_PROCESS_PRIVATE 和 PTHREAD_PROCESS_SHAREDPTHREAD_PROCESS_PRIVATE 是缺省值。

条件变量属性必须首先由 pthread_condattr_destroy(3C) 重新初始化后才能重用。pthread_condattr_init() 调用会返回指向类型为 opaque 的对象的指针。如果未销毁该对象,则会导致内存泄漏。

 

pthread_condattr_init 返回值

pthread_condattr_init() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。如果出现以下任一情况,该函数将失败并返回对应的值。

 

ENOMEM

描述:

分配的内存不足,无法初始化线程属性对象。

 

EINVAL

描述:

cattr 指定的值无效。

 

二:删除条件变量属性

使用 pthread_condattr_destroy(3C) 可以删除存储并使属性对象无效。

pthread_condattr_destroy 语法

int	pthread_condattr_destroy(pthread_condattr_t *cattr);
#include <pthread.h>

pthread_condattr_t cattr;

int ret;



/* destroy an attribute */

ret

 = pthread_condattr_destroy(&cattr); 

不必释放通过PTHREAD_COND_INITIALIZER静态宏初始化的条件变量

pthread_condattr_destroy 返回值

pthread_condattr_destroy() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。如果出现以下情况,该函数将失败并返回对应的值。

 

EINVAL

描述:

cattr 指定的值无效。

 https://docs.oracle.com/cd/E19253-01/819-7051/index.html

三:设置条件变量的范围

pthread_condattr_setpshared(3C) 可用来将条件变量的范围设置为进程专用(进程内)或系统范围内(进程间)。

 

pthread_condattr_setpshared 语法

 

int	pthread_condattr_setpshared(pthread_condattr_t *cattr,

    int pshared);
#include <pthread.h>



pthread_condattr_t cattr;

int ret;



/* all processes */

ret = pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_SHARED);



/* within a process */

ret = pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_PRIVATE);

如果 pshared 属性在共享内存中设置为 PTHREAD_PROCESS_SHARED,则其所创建的条件变量可以在多个进程中的线程之间共享。此行为与最初的 Solaris 线程实现中 mutex_init() 中的 USYNC_PROCESS 标志等效。

如果互斥锁的 pshared 属性设置为 PTHREAD_PROCESS_PRIVATE,则仅有那些由同一个进程创建的线程才能够处理该互斥锁。PTHREAD_PROCESS_PRIVATE 是缺省值。PTHREAD_PROCESS_PRIVATE 所产生的行为与在最初的 Solaris 线程的 cond_init() 调用中使用 USYNC_THREAD 标志相同。PTHREAD_PROCESS_PRIVATE 的行为与局部条件变量相同。PTHREAD_PROCESS_SHARED 的行为与全局条件变量等效。

 

pthread_condattr_setpshared 返回值

pthread_condattr_setpshared() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。如果出现以下情况,该函数将失败并返回对应的值。

 

EINVAL

描述:

cattr 或 pshared 的值无效。

 

四:获取条件变量的范围

pthread_condattr_getpshared(3C) 可用来获取属性对象 cattr 的 pshared 的当前值。

pthread_condattr_getpshared 语法

int	pthread_condattr_getpshared(const pthread_condattr_t *cattr,

    int *pshared);
#include <pthread.h>



pthread_condattr_t cattr;

int pshared;

int ret;



/* get pshared value of condition variable */

ret = pthread_condattr_getpshared(&cattr, &pshared); 

属性对象的值为 PTHREAD_PROCESS_SHARED 或 PTHREAD_PROCESS_PRIVATE

pthread_condattr_getpshared 返回值

pthread_condattr_getpshared() 在成功完成之后会返回零。其他任何返回值都表示出现了错误。如果出现以下情况,该函数将失败并返回对应的值。

 

EINVAL

描述:

cattr 的值无效。

pthread条件变量属性

标签:red   数据类型   内存不足   roc   proc   IV   attribute   初始   style   

原文地址:https://www.cnblogs.com/tianzeng/p/9185462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!