04-11-2010
3,
0
Join Date: Apr 2010
Last Activity: 11 April 2010, 8:33 AM EDT
Posts: 3
Thanks Given: 0
Thanked 0 Times in 0 Posts
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:
Code:
...Buffer A: 11Buffer C: 4Worker X packing B: 3Buffer B: 8Worker Y packing C: 2Buffer A: 12Production line A suspended....
2. Relevant commands, code, scripts, algorithms:
the code i am provided ,try my best to do it le
3. 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);
}
4. 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).