网站怎么做搜索引擎/软文营销成功案例
条件变量使用需要配合互斥量
int pthread_cond_init(pthread_cond_t *cond,pthread_mutex_t *mutex);
1、使用pthread_cond_wait等待条件变为真。传递给pthread_cond_wait的互斥量对条件进行保护,调用者把锁住的互斥量传递给函数。
2、这个函数将线程放在等待条件的线程列表上,然后对互斥量进行解锁,这个是原子操作。当条件满足时这个函数返回,返回以后继续对互斥量加锁。
int pthread_cond_timedwait(pthread_cond_t *cond,pthread_mutex_t *mutex,const struct timespec *abstime);
3、这个函数与pthread_cond_wait类似,只是多一个timeout,如果到了指定的时间条件还不满足,那么就返回。时间用下面的结构体表示。
struct timespec{
time_t tv_sec;
long tv_nsec;
};
注意,这个时间是绝对时间。例如你要等待3分钟,需要把当前时间加上3分钟然后转换到timespec,而不是直接将3分钟转换到timespec
当条件满足时,需要唤醒等待条件的线程
int pthread_cond_broadcast(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);
1、pthread_cond_broadcast唤醒等待条件的所有线程
2、pthread_cond_signal至少唤醒一个等待条件的某一个线程
注意,一定要在条件改变以后在唤醒线程