pthread_cond_timedwait 和 pthread_cond_wait 函数
int pthread_cond_timedwait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex,
const struct timespec *restrict abstime);
int pthread_cond_wait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex);
pthread_cond_timedwait
和 pthread_cond_wait
函数都用于阻塞等待条件变量。这两个函数都需要传入两个参数:
cond
:这是一个指向pthread_cond_t
类型变量的指针,表示要等待的条件变量。mutex
:这是一个指向pthread_mutex_t
类型变量的指针,表示与条件变量相关联的互斥锁。
这两个函数的区别在于,pthread_cond_timedwait
函数还需要传入一个额外的参数:
abstime
:这是一个指向timespec
结构体的指针,表示等待的绝对超时时间。
当调用这两个函数时,线程会自动释放互斥锁并阻塞等待条件变量。当条件变量被触发时,线程会重新获得互斥锁并从阻塞状态返回。
pthread_cond_timedwait
函数与 pthread_cond_wait
函数的区别在于,它可以设置一个超时时间。如果在超时时间内条件变量仍未被触发,则函数会返回错误。这样可以避免线程一直阻塞等待。
因此,如果希望线程一直阻塞等待条件变量,可以使用 pthread_cond_wait
函数;如果希望在线程阻塞等待一段时间后自动返回,则可以使用 pthread_cond_timedwait
函数。