写线程可以多次覆盖写,读线程必须在buffer中有数据后才能读,并且不能重复读取。
Pthread_cond_singal释放信号后,即使没有Pthread_cond_wait,信号也会马上复位。
static pthread_mutex_t mutex;
static pthread_cond_t count_nonzero;
static int lpr_completed_flag = 0;
/ **
* 或者这样初始化
* static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
* static pthread_cond_t count_nonzero = PTHREAD_COND_INITIALIZER;
*
*/
pthread_mutex_init(&mutex, NULL);
pthread_cond_init(&count_nonzero, NULL);
static int write_run_lpr_pthread(void)
{
pthread_mutex_lock(&mutex);
write();
lpr_completed_flag = 1;
pthread_cond_signal(&count_nonzero); //Pthread_cond_singal释放信号后,即使没有Pthread_cond_wait,信号也会马上复位
pthread_mutex_unlock(&mutex);
return 0;
}
static int read_run_osd_pthread(void)
{
pthread_mutex_lock(&mutex);
while (lpr_completed_flag == 0) {
pthread_cond_wait(&count_nonzero, &mutex);
}
read();
lpr_completed_flag = 0;
pthread_mutex_unlock(&mutex);
return 0;
}
pthread_cond_destroy(&count_nonzero);
pthread_mutex_destroy(&mutex);