Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!
- The problem statement, all variables and given/known data:
Write a C program that accepts 3 parameters. Each parameter indicates the quantity of product to be
produced. Each product will be produced in different production line. Ready products will be placed
in a buffer area located at the end of each production line. Packaging workers will pack the products
into boxes. Information of each production line as follow:
Production line A: product ready in 1-2 minutes, buffer capacity: 12 units
Production line B: product ready in 2-3 minutes, buffer capacity: 6 units
Production line C: product ready in 1-2 minutes, buffer capacity: 24 units
There are currently 2 packaging workers available. Each worker needs 2 minutes to pack 6 units of
product into a box. The production line will be temporary suspended if the buffer area is full of
product. The operation will continue when the worker has taken 1 unit of product from the buffer
area.
Simulate the operation of production line and the packaging workers by using threads and
appropriate semaphores. There are at least 5 threads, but you may use additional thread if it is
necessary. You have to decide how the workers select the product to pack. Assume that 1 second in
your program is equivalent to 1 minute.
Sample output:
Code:
...Buffer A: 11Buffer C: 4Worker X packing B: 3Buffer B: 8Worker Y packing C: 2Buffer A: 12Production line A suspended....
- Relevant commands, code, scripts, algorithms:
the code i am provided ,try my best to do it le
- The attempts at a solution (include all code and scripts):
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
void *A(void *arg);
void *B(void *arg);
void *C(void *arg);
int main()
{
int res, total = 0;
pthread_t b_thread, e_thread, s_thread;
void *thread_result;
res = sem_init(&A, B, C 0, 0);
if (res != 0) {
perror("Semaphore initialization failed");
exit(EXIT_FAILURE);
}
//create the thread that prepares A
res = pthread_create(&b_thread, A, NULL);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
//create the thread that prepares B
res = pthread_create(&s_thread, NULL, B, NULL);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
//create the thread that prepares C
res = pthread_create(&s_thread, NULL, C, NULL);
if (res != 0) {
perror("Thread creation failed");
exit(EXIT_FAILURE);
}
and(getpid());
while (total < 12) {
sleep(rand() % 3 + 1);
sem_post(&A);
printf("A ready\n");
total++;
}
printf("\nWaiting for thread to finish...\n");
res = pthread_join(b_thread, &thread_result);
if (res != 0) {
perror("Thread join failed");
exit(EXIT_FAILURE);
}
printf("Thread joined\n");
res = pthread_join(s_thread, &thread_result);
if (res != 0) {
perror("Thread join failed");
exit(EXIT_FAILURE);
}
printf("Thread joined\n");
sem_destroy(&B);
exit(EXIT_SUCCESS);
}
void *A(void *arg)
{
int i;
srand(time(NULL));
for (i = 0; i < 7; i++) {
sem_wait(&B);
sleep(rand() % 4 + 1);
printf("A prepared.\n");
}
pthread_exit(NULL);
}
void *B(void *arg)
{
int i;
srand(time(NULL));
for (i = 0; i < 5; i++) {
sem_wait(&A);
sleep(rand() % 3 + 1);
printf("B prepared.\n");
}
pthread_exit(NULL);
}
void *C(void *arg)
{
int i;
srand(time(NULL));
for (i = 0; i < 5; i++) {
sem_wait(&A);
sleep(rand() % 3 + 1);
printf("C prepared.\n");
}
pthread_exit(NULL);
}
- Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):
utar kampar ,perak,malasysia
computer enginnering ,professor :Mr Lim
Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).