生产者消费者模型(一)——模拟单线程的互斥与同步

本文介绍了生产者消费者模型的基本概念,重点阐述了条件变量的作用和使用,包括初始化、等待与唤醒操作。接着,讨论了模型的321规则和三大特性:解耦、并发支持及忙闲不均。最后,通过单线程实现展示了如何利用链表作为缓冲区,确保生产者与消费者间的同步与互斥。
摘要由CSDN通过智能技术生成

在现实的软件开发过程中,经常会碰到如下情景:某个模块负责产生数据,这些数据由另外一个模块来负责处理(此处的模块是广义的,可以是类、函数、线程和进程等)。产生数据的模块称之为生产者,而处理数据的模块就是消费者。

条件变量

在正式开始生产者与消费者模型之前,我们应该对条件变量有一个新的认识。

条件变量(Condition Variable):它的作用是描述资源的就绪状态,属于线程的一种同步机制。互斥锁用于上锁,条件变量用于等待。条件变量本身是由互斥量保护的,线程在改变之前首先会封锁互斥量,因此其他线程在获得互斥量之前不会觉察到这样的变化。

(1)pthread_cond_init 和 pthread_cond_destroy:条件变量的初始化与销毁。

#include <pthread.h>
int pthread_cond_destroy(pthread_cond_t *cond);//条件变量销毁
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);//条件变量初始化
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

参数cond:条件变量。

参数attr:条件变量的属性,设置为NULL则表示缺省属性。

返回值:成功返回0,失败返回错误码。

和mutex的初始化和销毁类似,如果条件变量是静态分配的,也可以使用PTHREAD_COND_INITALIZER初始化,相当于用pthread_cond_init函数初始化并设置参数attr为NULL。

(2)pthread_cond_wait/timewait:前者是条件变量等待,后者是等待超时。

 #include <pthread.h>
 int pthread_cond_timedwait(pthread_cond_t *restrict cond,  pthread_mutex_t *restrict mutex, const struct timespec *restrict abstime);
 int p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值