Thread: Lost with wrong output

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User
    Join Date
    Aug 2009
    Posts
    70

    Lost with wrong output

    I can't see how this code isn't getting the output which should be:

    buffer elem = -378931907
    buffer elem = 1991142473
    buffer elem = -2051466334
    buffer elem = -1945167320
    buffer elem = 1080018178

    Rather than:

    buffer elem = 1343403155
    buffer elem = 225005971
    buffer elem = 1270463783
    buffer elem = -1162132598
    buffer elem = 636863738

    The thread is suppose to be suspended given: if((b->in+1)%b->max_buffer_size == b->out) then await it's signal from get_buffer to add more to the buffer. The maximum buffer size has been initialised to 5.

    What is the source of this problem?

    from put buffer = -378931907
    from put buffer = 1991142473
    from put buffer = -2051466334
    from put buffer = -1945167320
    from put buffer = 1080018178
    from put buffer = 1343403155
    from put buffer = 225005971
    from put buffer = 1270463783
    from put buffer = -1162132598
    from put buffer = 636863738


    Code:
    void init_buffer(bufferQueue *b, semaphore s, int min, int max)
    {
    
            b->buffer_array = malloc(max*sizeof(int));
            b->in = 0;
            b->out = 0;
            b->min_buffer_size = min;
            b->max_buffer_size = max;
            b->sem = s;
    
    }
    Code:
    void put_buffer(bufferQueue *b, int v)
    {
    
            if((b->in+1)%b->max_buffer_size == b->out)
            {
    
                    semWait(&(b->sem));
    
            }
    
            b->buffer_array[b->in] = v;
            printf("from put buffer = %d\n", b->buffer_array[b->in]);
            b->in = (b->in+1)%b->max_buffer_size;
            semSignal(&(b->sem));
    
    }
    Code:
    void *producer(void* cb)
    {
            printf("testing\n");
            bufferQueue *cbuffer = (bufferQueue *)cb;
            int  i;
            for(i = 0; i < 10; i++)
            {
                    put_buffer(cbuffer, randomNum());
            }
    
            for(i = 0; i < 5; i++)
            {
                    printf("buffer elem = %d\n", cbuffer->buffer_array[i]);
            }
    
            destroy_buffer(cbuffer);
            return cb;
    }
    
    int main(void)
    {
            semaphore sem;
            bufferQueue cbuffer;
            pthread_t thread;
    
            init_sem(&sem);
            init_buffer(&cbuffer, sem, 0, 5);
    
            pthread_create(&thread, NULL, producer, (void*)(&cbuffer));
    Last edited by erasm; 10-05-2009 at 06:38 PM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Wrong Output!
    By kolliash in forum C++ Programming
    Replies: 6
    Last Post: 06-19-2008, 07:55 AM
  2. Something Wrong with my function in Linux!
    By Matus in forum C Programming
    Replies: 5
    Last Post: 04-30-2008, 10:00 PM
  3. Getting wrong output from a class
    By orikon in forum C++ Programming
    Replies: 11
    Last Post: 11-18-2005, 07:58 PM
  4. Replies: 3
    Last Post: 09-14-2005, 09:20 PM
  5. Leap year program prints wrong output
    By Guti14 in forum C Programming
    Replies: 8
    Last Post: 08-24-2004, 11:56 AM