Abnormal producer consumer problem driving me nuts

 
Thread Tools Search this Thread
Homework and Emergencies Homework & Coursework Questions Abnormal producer consumer problem driving me nuts
# 1  
Old 01-05-2013
Abnormal producer consumer problem driving me nuts

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:
normally, i hate asking someone to do my homework for me but am getting desperate right now.
i have a project about consumer producer problem. the deadline is tonight at 23:55. but i havent gotten it working yet. i just COULDNT get it to work right yet.
the problem is as follows: the C - program will prompt for the following integer inputs:

m: the number of producer threads
n: the number of consumer threads
k: the size of the bounded buffer array
i: the number of candy items to be filled in each box
j: the number of candy items produced by each producer thread before it quits
now each producer thread produces a specific candy item, and each consumer thread takes an item out of the buffer one at a time. say producer1 produces red, prducer2 blue and so on.. as for consumer threads. after a given consumer thread has filled a given box; it prints the contents of the box as follows:
Consumer thread A filled a new box of candy containing: blue 3, red 7, green 8, ...



2. Relevant commands, code, scripts, algorithms:

semaphores and threads are to be used.

3. The attempts at a solution (include all code and scripts):
Code:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include "buffer.h"
typedef int buffer_item;
#define BUFFER_SIZE k
#define RAND_DIVISOR 100000000
#define TRUE 1

/* The mutex lock */
pthread_mutex_t mutex;

/* the semaphores */
sem_t full, empty;

/* the buffer */
buffer_item buffer[BUFFER_SIZE];

/* buffer counter */
int counter;

pthread_t tid1, tid2, tid1protid, tid2con;       //Thread ID
pthread_attr_t attr; //Set of thread attributes

void *producer(void *param); /* the producer thread */
void *consumer(void *param); /* the consumer thread */

void initializeData() {

   /* Create the mutex lock */
   pthread_mutex_init(&mutex, NULL);

   /* Create the full semaphore and initialize to 0 */
   sem_init(&full, 0, 0);

   /* Create the empty semaphore and initialize to BUFFER_SIZE */
   sem_init(&empty, 0, BUFFER_SIZE);

   /* Get the default attributes */
   pthread_attr_init(&attr);

   /* init buffer */
   counter = 0;
}

/* Producer Thread */
void *producer(void *param) {
   buffer_item item;
int i;

   while(TRUE) {
      /* sleep for a random period of time */
      int rNum = rand() / RAND_DIVISOR;
      sleep(rNum);

      /* generate a random number */
      item = rand();

      /* acquire the empty lock */
      sem_wait(&empty);
      /* acquire the mutex lock */
      pthread_mutex_lock(&mutex);
 for(i = 0; i < j; i++) {
      /* Create the thread */
      pthread_create(&tidpro2,&attr,consumer,NULL);
   }[/B]      if(insert_item(item)) {
         fprintf(stderr, " Producer report error condition\n");
      }
      else {
         printf("producer produced %d\n", item);
      }
      /* release the mutex lock */
      pthread_mutex_unlock(&mutex);
      /* signal full */
      sem_post(&full);
   }
}

/* Consumer Thread */
void *consumer(void *param) {
   buffer_item item;
int q;
   while(TRUE) {
      /* sleep for a random period of time */
      int rNum = rand() / RAND_DIVISOR;
      sleep(rNum);
   for(i = 0; q< n; i++) {
      /* Create the thread */
      pthread_create(&tid2,&attr,consumer,NULL);
   }[/B]      /* aquire the full lock */
      sem_wait(&full);
      /* aquire the mutex lock */
      pthread_mutex_lock(&mutex);

      if(remove_item(&item)) {
         fprintf(stderr, "Consumer report error condition\n");
      }
      else {
         printf("consumer consumed %d\n", item);
      }
      /* release the mutex lock */
      pthread_mutex_unlock(&mutex);
      /* signal empty */
      sem_post(&empty);
   }
}

/* Add an item to the buffer */
int insert_item(buffer_item item) {
   /* When the buffer is not full add the item
      and increment the counter*/
   if(counter < BUFFER_SIZE) {
      buffer[counter] = item;
      counter++;
      return 0;
   }
   else { /* Error the buffer is full */
      return -1;
   }
}

/* Remove an item from the buffer */
int remove_item(buffer_item *item) {
   /* When the buffer is not empty remove the item
      and decrement the counter */
   if(counter > 0) {
      *item = buffer[(counter-1)];
      counter--;
      return 0;
   }
   else { /* Error buffer empty */
      return -1;
   }
}

int main(int argc, char *argv[]) {
   /* Loop counter */
   int i;

   /* Verify the correct number of arguments were passed in */
   if(argc != 5) {
      fprintf(stderr, "USAGE:./main.out <INT> <INT><INT><INT> <INT>\n");
   }

   int mainSleepTime = atoi(argv[1]); /* Time in seconds for main to sleep */
   int m = atoi(argv[2]); /* Number of producer threads */
   int n = atoi(argv[3]); /* Number of consumer threads */
   int i = atoi(argv[4]); /* Number of producer threads */
   int j = atoi(argv[5]); /* Number of consumer threads */
   int k = atoi(argv[2]); /* Number of producer threads */
   initializeData();

   /* Create the producer threads */
   for(i = 0; i < m; i++) {
      /* Create the thread */
      pthread_create(&tid1,&attr,producer,NULL);
    }

   /* Create the consumer threads */
   for(i = 0; i < n; i++) {
      /* Create the thread */
      pthread_create(&tid2,&attr,consumer,NULL);
   }

   /* Sleep for the specified amount of time in milliseconds */
   //sleep(mainSleepTime);
    pthread_join(tid1, NULL);

    pthread_join(tid2, NULL);

   /* Exit the program */
   printf("Exit the program\n");
   exit(0);
}


4. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):
School: Busitema University Uganda
State: Central
Course: operating systems
Professor: Pierre L G.
Course No. CENG 341

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

Last edited by Scrutinizer; 01-05-2013 at 11:04 AM.. Reason: code tags
# 2  
Old 01-05-2013
thanks for the help dude about the malloc :)

am done here, thanks to all those who pointed out a thing or two Smilie. the baby is up and running now. heheheSmilieSmilieSmilie
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

This is driving me nuts error on line 17

There is an error in this script on line 17 bee at it for 12 hour trying to find the problem, just lost. please help a newbie. line 17: #!/bin/sh 2 ## Name of the program is test_script_b.sh 3 4 ##request information from the user 5 echo enter 3 numbers 6 read a b c 7 8... (4 Replies)
Discussion started by: osdustin
4 Replies

2. UNIX for Dummies Questions & Answers

Abnormal producer consumer problem driving me nuts

normally, i hate asking someone to do my homework for me but am getting desperate right now. i have a project about consumer producer problem. the deadline is tonight at 23:55. but i havent gotten it working yet. i just COULDNT get it to work right yet. the problem is as follows: the C - program... (0 Replies)
Discussion started by: alexantosh
0 Replies

3. UNIX for Dummies Questions & Answers

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (3 Replies)
Discussion started by: gokult
3 Replies

4. UNIX for Advanced & Expert Users

producer consumer

Control two exclusively shared resources(semaphore). The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the... (0 Replies)
Discussion started by: gokult
0 Replies

5. Shell Programming and Scripting

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (1 Reply)
Discussion started by: gokult
1 Replies

6. Programming

producer consumer

Control two exclusively shared resources. The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers. Can any one help me with the code. ... (0 Replies)
Discussion started by: gokult
0 Replies

7. Shell Programming and Scripting

Short code driving me nuts.

Hello guys I am trying to learn perl and have a simple calculator I am trying to run but I get error runaway multi-line. Can someone point this rookie in the right direction. ### print 'Welcome to the Calculator'; print 'Would you like to enter the calculator? Please Type y or n'; $run =... (9 Replies)
Discussion started by: daddygrant
9 Replies

8. Programming

producer-consumer problem

The intention of the program. Create N threads with 2 shared memories. One shared memory to write, one shared memory to recieve. Consumer creates 2 shared memory to share with producer. I need H threads for the producer as well(somebody help on it..) Also another question, would segment_id... (2 Replies)
Discussion started by: joey
2 Replies

9. UNIX for Dummies Questions & Answers

Dumb question but its driving me nuts

I use a tcsh and I need to monitor a file that its constantly updating. In the past I remember using less -(an option) fileName. This option told less to keep listening to this file and output the any changes. What is this option??? I think I read the man page for less like 5 times and I... (3 Replies)
Discussion started by: jepombar
3 Replies

10. UNIX for Dummies Questions & Answers

Producer/Consumer

Hi all, I have an Producer/Consumer program in C(using shared memory and semaphores).It is working fine with sleep calls after every read/write operation.Each one is a independent program.Now if i remove the sleep calls in consumer,it goes on waiting in the loop till the producer puts some valid... (3 Replies)
Discussion started by: poorni_uma
3 Replies
Login or Register to Ask a Question