Operating system LINUX

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

  1. 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:
...
Buffer A: 11
Buffer C: 4
Worker X packing B: 3
Buffer B: 8
Worker Y packing C: 2
Buffer A: 12
Production line A suspended.
...
  1. Relevant commands, code, scripts, algorithms:
    the code i am provided ,try my best to do it le

  2. 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);
}
  1. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):

jennifer
utar kampar ,perak,malasysia
computer enginnering

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).

School, course and professor/instructor information not correct.

Need complete information.

Thread closed.