六、 运行结果:
缓冲区大小为5,手动输入生产者和消费者的线程数,观察运行结果。
1. 3个生产者线程,1个消费者线程,缓冲区的插入和删除操作都正常。
2.
3个生产者线程,2个消费者线程,缓冲区的插入和删除操作都正常。
3.
3个生产者线程,3个消费者线程,生产者生产出三个元素放入缓冲区,消费者消费掉这三个元素,再想要消费时候发现缓冲区内为空,因此输出错误提示信息。
4.
3个生产者线程,3个消费者线程,最初消费者想要消费,但是缓冲区为空,因此输出错误提示信息。生产者生产出2个元素放入缓冲区,消费者消费掉这2个元素,生产者再生产出1个元素放入缓冲区,消费者消费掉这1个元素,消费者再想要消费时候发现缓冲区内为空,
因此输出错误提示信息。
5.
3个生产者线程,3个消费者线程,最初消费者想要消费,但是缓冲区为空,因此输出错误提示信息。
6.
2个生产者线程,4个消费者线程,最初消费者想要消费,但是缓冲区为空,因此输出错误提示信息。生产者生产出1个元素放入缓冲区,消费者消费掉这1个元素,生产者再生产出2个元素放入缓冲区,消费者消费掉这2个元素,生产者接着生产出1个元素放入缓冲区,消费者消费掉这1个元素,消费者再想要消费时候发现缓冲区内为空,
因此输出错误提示信息。
7.
实验结果分析:
对比每次运行的结果发现都是随机的,并且消费者和生产者线程出现的先后顺序也是随机的。分析原因是由于给每一个消费者和生产者线程都睡眠了一段随机事件。本次测试对于线程数的设计包括两个线程数相等、消费者线程多于生产者以及生产者线程多于消费者,确保每一种情况都能正常运行,正常在缓冲区内进行插入和删除操作,若不满足条件则提示操作失败,报错。
七、 源代码:
1.
buffer.h
2.
pcProblem.c