线程等待与激活

1、相关结构

(1)
pthread_cond_t类型的变量表示多线程的条件变量,用于控制线程等待和就绪的条件。

(2)
pthread_cond_init()函数用来初始化一个条件变量。
pthread_cond_destroy()函数用来销毁一个条件变量。
函数声明如下:

pthread_cond_init()函数使用attr属性初始化条件变量cond,如果属性为NULL则表示使用默认值。
结构 pthread_condattr_t是条件变量的属性结构,可以用它来设置条件变量是进程内可用还是进程间可用,默认值是 PTHREAD_ PROCESS_PRIVATE,即此条件变量被同一进程内的各个线程使用。
注意初始化条件变量只有未被使用时才能重新初始化或被释放。

(3)

唤醒cond关联的一个线程,存在多个等待线程时按入队顺序激活其中一个;

(4)
extern int pthread_cond_broadcast (pthread_cond_t *__cond)
__THROWNL __nonnull ((1));
唤醒所有等待条件变量cond的线程。

(5)

等待条件变量被信号或广播唤醒。假设MUTEX之前已经锁定。

(6)

在abstime时间内等待cond被信号或广播唤醒。
假设mutex之前已经锁定。
abstime是指定的一个绝对时间,0表示从1970年1月1日0点0分0秒 GMT。

(7)
无论哪种等待方式,都必须和一个互斥锁配合,以防止多个线程同时请求pthread_cond_wait()(或pthread_cond_timedwait(),下同)的竞争条件(Race Condition)。mutex互斥锁必须是普通锁(PTHREAD_MUTEX_TIMED_NP)或者适应锁(PTHREAD_MUTEX_ADAPTIVE_NP),且在调用pthread_cond_wait()前必须由本线程加锁(pthread_mutex_lock()),而在更新条件等待队列以前,mutex保持锁定状态,并在线程挂起进入等待前解锁。
在条件满足从而离开pthread_cond_wait()之前,mutex将被重新加锁,以与进入thread_cond_wait()前的加锁动作对应。

使用pthread_cond_wait方式如下:

2、示例

参考

blog.chinaunix.net/uid-28663205-id-4825396.html
www.cnblogs.com/secondtonone1/p/5580203.html

————————————————————

原创文章,转载请注明: 转载自孙希栋的博客

本文链接地址: 《线程等待与激活》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up