pthread_cond_wait避免线程空转

多线程对同一块区域进行操作时,需要定义如下两种类型的变量:

pthread_mutex_t xxx;
pthread_cond_t yyy;

pthread_mutex_t类型的变量,即锁,对公共区域的操作进行同步;

pthread_cond_t类型的变量,用来对事件状态进行检测。

举例:读线程从队列中读取数据,当队列为空时,调用pthread_cond_wait函数阻塞自己,直到队列中有数据;写线程向队列中写入数据,如果队列之前的状态为空,写线程调用pthread_cond_signal函数唤醒正在被阻塞的读线程。

线程调用pthread_cond_wait阻塞自己可以让出cpu资源,避免线程在while(1)循环中空转,耗尽cpu资源。

常用函数:

int pthread_mutex_init(pthread_mutex_t *restrict mutex,
              const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);

int pthread_cond_init(pthread_cond_t *restrict cond,
              const pthread_condattr_t *restrict attr);
int pthread_cond_destroy(pthread_cond_t *cond);
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_wait(pthread_cond_t *restrict cond,
              pthread_mutex_t *restrict mutex);

 

posted @ 2014-10-16 19:39  tanghuimin0713  阅读(801)  评论(0编辑  收藏  举报