pthread_cond_destroy 或 pthread_cond_init 子例程

用途

初始化和销毁条件变量。

线程库 (libpthreads.a)

语法

#include <pthread.h>

int pthread_cond_init (cond, attr)
pthread_cond_t *cond;
const pthread_condattr_t *attr;

int pthread_cond_destroy (cond)
pthread_cond_t *cond;

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

描述

函数 pthread_cond_init 使用 attr引用的属性初始化 cond 引用的条件变量。 如果 attr 为 NULL ,那么将使用缺省条件变量属性; 其效果与传递缺省条件变量属性对象的地址相同。 成功初始化后,条件变量的状态将变为已初始化。

尝试初始化已初始化的条件变量会导致未定义的行为。

函数 pthread_cond_destroy 会破坏由 cond指定的给定条件变量; 该对象实际上变为未初始化。 实现可能会导致 pthread_cond_destroycond 引用的对象设置为无效值。 可以使用 pthread_cond_init重新初始化被破坏的条件变量对象; 未定义在被破坏后引用该对象的结果。

销毁当前未阻塞任何线程的已初始化条件变量是安全的。 尝试破坏当前阻塞其他线程的条件变量会导致未定义的行为。

在缺省条件变量属性适当的情况下,可以使用宏 PTHREAD_COND_INITIALIZER 来初始化静态分配的条件变量。 此效果相当于通过调用 pthread_cond_init 并将参数 attr 指定为 NULL 进行动态初始化,但不会执行错误检查。

参数

描述
cond 指向条件变量的指针。
attr 指定条件的属性。

返回值

如果成功, pthread_cond_initpthread_cond_destroy 函数将返回零。 否则,将返回错误号以指示错误。 EBUSY 和 EINVAL 错误检查 (如果已实现) 就像它们在函数处理开始时立即执行一样,并在修改由 cond指定的条件变量的状态之前导致错误返回。

错误代码

在下列情况下, pthread_cond_init 函数将失败:

描述
再次 系统缺少必要的资源 (内存除外) 来初始化另一个条件变量。
ENOMEM 内存不足,无法初始化条件变量。

在下列情况下, pthread_cond_init 函数可能失败:

描述
EINVAL attr 指定的值无效。

在下列情况下, pthread_cond_destroy 函数可能会失败:

描述
EBUSY 在引用 cond 所引用的对象时 (例如,当另一个线程在 pthread_cond_waitpthread_cond_timedwait 中使用时) ,实现检测到尝试破坏该对象。
EINVAL cond 指定的值无效。

这些函数不会返回错误代码 EINTR。