1.-在此分配中,您将使用jBACI(C--)实现无界缓冲区生产者/消费者的无死锁变体。 C--是C ++的子集,可让您声明信号量并应用操作P和V。
在具有一个生产者和一个消费者的标准解决方案中,您将至少需要三个名为: 满→当缓冲区已满时停止生产者生产项目。 (初始值n =缓冲区大小) 空→当缓冲区为空(初始值为零)时,阻止使用者使用缓冲区中的项目 Mutex→在关键部分仅允许一个过程(初始值一)
在本作业中,您将实现有界缓冲区生产者/消费者,将有一个生产者(P),一个消费者(C)和一个缓冲区;缓冲区的大小为5。
生产者将生产20个项目并停止运行。
消费者将消耗缓冲区中的项目,直到20个项目被消耗为止
项目方向 您将基于BACI解释器编写程序。从Webcourses上的JBACI文件夹下载jBACI可执行文件,示例文件和文档。 Webcourses中的JBACI文件夹告诉您如何在计算机上下载和安装jBACI。
BACI支持C--编程,它是C ++的子集,它扩展了用于过程同步的原语(信号量和监视器)。
BACI中的程序示例:
line pc
1 0 // example of C-- semaphore usage
2 0
3 0 semaphore count; // a "general" semaphore
4 0 binarysem output; // a binary (0 or 1) semaphore for unscrambling output
5 0
6 0 void increment()
7 0 {
8 0 p(output); // obtain exclusive access to standard output
9 2 cout << "before v(count) value of count is " << count << endl;
10 6 v(output);
11 8 v(count); // increment the semaphore
12 10 } // increment
13 11
14 11 void decrement()
15 11 {
16 11 p(output); // obtain exclusive access to standard output
17 13 cout << "before p(count) value of count is " << count << endl;
18 17 v(output);
19 19 p(count); // decrement the semaphore (or stop -- see manual text)
20 21 } // decrement
21 22
22 22 main()
23 23 {
24 23 initialsem(count,0);
25 26 initialsem(output,1);
26 29 cobegin {
27 30 decrement(); increment();
28 36 }
29 37 } // main
测试您的解决方案
您必须针对以下两种情况运行和测试您的解决方案,如下所述,并对每个测试发出的结果进行比较和评论: 测试您的第一个解决方案 在使用者中引入时间延迟并测试您的解决方案。可以使用一个可重复执行1000次的虚拟循环来实现时间延迟