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_destroy 将 cond 引用的对象设置为无效值。 可以使用 pthread_cond_init重新初始化被破坏的条件变量对象; 未定义在被破坏后引用该对象的结果。
销毁当前未阻塞任何线程的已初始化条件变量是安全的。 尝试破坏当前阻塞其他线程的条件变量会导致未定义的行为。
在缺省条件变量属性适当的情况下,可以使用宏 PTHREAD_COND_INITIALIZER 来初始化静态分配的条件变量。 此效果相当于通过调用 pthread_cond_init 并将参数 attr 指定为 NULL 进行动态初始化,但不会执行错误检查。
参数
| 项 | 描述 |
|---|---|
| cond | 指向条件变量的指针。 |
| attr | 指定条件的属性。 |
返回值
如果成功, pthread_cond_init 和 pthread_cond_destroy 函数将返回零。 否则,将返回错误号以指示错误。 EBUSY 和 EINVAL 错误检查 (如果已实现) 就像它们在函数处理开始时立即执行一样,并在修改由 cond指定的条件变量的状态之前导致错误返回。
错误代码
在下列情况下, pthread_cond_init 函数将失败:
| 项 | 描述 |
|---|---|
| 再次 | 系统缺少必要的资源 (内存除外) 来初始化另一个条件变量。 |
| ENOMEM | 内存不足,无法初始化条件变量。 |
在下列情况下, pthread_cond_init 函数可能失败:
| 项 | 描述 |
|---|---|
| EINVAL | attr 指定的值无效。 |
在下列情况下, pthread_cond_destroy 函数可能会失败:
| 项 | 描述 |
|---|---|
| EBUSY | 在引用 cond 所引用的对象时 (例如,当另一个线程在 pthread_cond_wait 或 pthread_cond_timedwait 中使用时) ,实现检测到尝试破坏该对象。 |
| EINVAL | cond 指定的值无效。 |
这些函数不会返回错误代码 EINTR。