多线程对同一块区域进行操作时,需要定义如下两种类型的变量:
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);