生产者消费者模型 、POSIX信号量、读写锁

时间:2022-09-22 15:14:01

生产者消费者模型 、POSIX信号量、读写锁 相关代码


1. 生产者消费者模型

  • 建立一个带头结点的链表,生产者以头插的方式往链表中放入数据,消费者以头删的方式从链表中取出数据。
  • 消费者线程在读数据前要判断链表是否为空? 如果为空就 condition wait。
  • 生产者线程则直接往链表中插入数据。
  • 对链表操作的部分要加互斥锁,以保证线程安全。

2.POSIX信号量

  • 建立一个基于数组的环形队列buffer,生产者依次向队列中放入数据,消费者依次从队列中取出数据。
  • 建立两个信号量empty(初始化为0) 和 full(初始化为BUFFSIZE) 分别表示队列距离 空 和 满 还剩余的操作数(也就是信号量的数值)。
  • 在线程中对全局变量操作的部分加入互斥锁。
  • 消费者线程 在开始时wait empty ,在结束时 post full 。
  • 生产者线程 在开始时wait full, 在结束时 post empty。

3.读写锁

  • 创建读写锁rwlock,写线程在对临界资源写时加写锁。读线程在对临界资源读取的时候加读锁。
  • 加写锁后,读写锁再被获取是均被阻塞。
  • 加读锁后,读锁还可以被获取,写锁不能被获取。