COMP2710 Project 5 -Introduction to producer and consumer model Solved
Objectives:
1. Complete the source code to simulate producer/consumer problem.
2. Understand the basics of the POSIX thread library.
3. Build a binary program on a Linux machine.
4. Run the program and record the result of the simulation.
○ Important! Option 1: For Mac and Linux users, use SSH to connect to a remote Linux server. Please read files in “tutorial” on Canvas for details.
○ Important! Option 2: For Window 10 users, Please read “enviro_tutorial”, “Putty Tutorial” and “Win subsystem Linux” for details.
● Important! Read the I/O format specification carefully and follow. It is very important to your final grade of this project!
● You are highly recommended to use a Linux operating system.
1. Introduction to producer and consumer model
Producer and consumer model is a model to schedule how concurrent processes and threads access the resources. It contains:
1. Producer: one or multiple processes/threads that produce data or release hardware resource
2. Consumer: the one process/threads that take in data or use hardware resource to do computation.
A producer could also be relatively a consumer to the output of another producer, vice versa.
3. Buffer: the destination to store the output from producer or resources and later accessed by another consumer.
Other concepts involved in our project:
4. POSIX thread: threads mechanism that satisfy POSIX standard (most operating system)
5. Mutex: a "lock" that guarantee that only one person have the access.
In this project we use POSIX threads. The "pthread" is a POSIX thread library written in C++ and provides the basic functions.
To simplify our simulation, we assume there are only 2 posix threads. One is the consumer, the other is the producer. The producer generates 1 unit data each time to the buffer, and the consumer takes 1 unit data from the buffer each time. The size of the buffer is 1. One unit data is just one integer. The producer generates integers 7, 14, 21 .... into the buffer and consumer read them out from the buffer.
2. Follow the Format Specification (10 Points)
In the source file "Firstname_Lastname.cpp", you will find first four comment lines:
Your first task is modifying the two lines between the beginning line and end line. Change them into your first name and last name. Remember the strings are case-sensitive, so capitalize the first letter of the word and follow exactly the syntax of the example.
You can see lots of similar code blocks in the file. You are free and supposed to fill your answer between those special beginning and ending comment lines. You can insert and edit multiple lines between special comment lines in anyways, however(Important!), as the comment indicated, do not modify the special begin and comment lines themselves!
Let's do the second task. Scroll down to the bottom of the file and find those lines (press "shift + g" if you are using vi/vim):
3. Complete Source Code (70 Points)
Read the source code and rest comments, try to understand the function of each line of code. Try to understand the basic usage of pthread library function from the example code of producer and the from the main function.
Follow the instructions in the comments and insert proper code into the rest 7 blocks to implement a producer/consumer model. (Only .cpp file acceptable in this project).
4. Run and Record Simulation Result (10 Points)
Compile your source code into a binary program. For example, use following command to include the pthread library:
After you compile the c source code successfully, please use the script command to record the running result of the program Firstname_Lastname:
$ script Firstname_Lastname.script
Script started, file is Firstname_Lastname.script
./Firstname_Lastname
After you run the program, you will have the following results:
Banner id: 903900281 producer produce item 7 consumer consume item 7 producer produce item 14 consumer consume item 14 producer produce item 21 consumer consume item 21 producer produce item 28 consumer consume item 28 producer produce item 35 consumer consume item 35 producer produce item 42 consumer consume item 42 producer produce item 49 consumer consume item 49 producer produce item 56 consumer consume item 56 producer produce item 63 consumer consume item 63 producer produce item 70
consumer consume item 70
You should have the same result except the different in the banner ID. Then exit recording and save it into typescript file "Firstname_Lastname.script" by the following command:
$ exit
exit Script done, file is Firstname_Lastname.script