写线程可以多次覆盖写,读线程必须在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);
本文探讨了使用pthread_mutex和pthread_cond进行线程同步的方法。详细介绍了如何通过条件变量实现写线程对缓冲区的多次写入操作,以及读线程在数据可用时的非重复读取。同时,解析了pthread_cond_signal信号释放后的行为特性。

被折叠的 条评论
为什么被折叠?



