1. 生产者消费者模型
- 建立一个带头结点的链表,生产者以头插的方式往链表中放入数据,消费者以头删的方式从链表中取出数据。
- 消费者线程在读数据前要判断链表是否为空? 如果为空就 condition wait。
- 生产者线程则直接往链表中插入数据。
- 对链表操作的部分要加互斥锁,以保证线程安全。
2.POSIX信号量
- 建立一个基于数组的环形队列buffer,生产者依次向队列中放入数据,消费者依次从队列中取出数据。
- 建立两个信号量empty(初始化为0) 和 full(初始化为BUFFSIZE) 分别表示队列距离 空 和 满 还剩余的操作数(也就是信号量的数值)。
- 在线程中对全局变量操作的部分加入互斥锁。
- 消费者线程 在开始时wait empty ,在结束时 post full 。
- 生产者线程 在开始时wait full, 在结束时 post empty。
3.读写锁
- 创建读写锁rwlock,写线程在对临界资源写时加写锁。读线程在对临界资源读取的时候加读锁。
- 加写锁后,读写锁再被获取是均被阻塞。
- 加读锁后,读锁还可以被获取,写锁不能被获取。