Code Monkey home page Code Monkey logo

bounded-buffer-problem's Introduction

CS 433 Bounded Buffer Problem

Copyright 2017 Caleb Evans, Jonathan Tapia

This program implements a multithreaded C++ solution to the Bounded Buffer Problem (also known as the Producer-Consumer Problem).

How to run

Run make to compile the program, then execute the compiled program by running ./bbp.out with three arguments. The first argument is the number of seconds the program will sleep before timing out and terminating. The second argument is the number of producer threads to create. The third and final argument is the number of consumer threads to create. For instance:

# Create 2 producers and 3 consumers, timing out after 10 seconds
./bbp.out 10 2 3

When a producer inserts a value or when a consumer removes a value, the respective thread will display the operation, value, and new buffer contents. For example:

produce 5 => [5]
consume 5 => []
produce 3 => [3]
produce 8 => [3, 8]

bounded-buffer-problem's People

Contributors

caleb531 avatar tapiaxj avatar

Watchers

 avatar  avatar  avatar  avatar

bounded-buffer-problem's Issues

Synchronize printing to stdout (cout)

Sometimes, when executing the program, two or more producer/consumer threads will try to print output at the same time. This happens more frequently for smaller THREAD_MAX_SLEEP_TIME values; try setting it to 1 to see what I mean.

produce 18
produce 66
consume 18
consume 66
produce 15
produce consume 515

consume 5
produce 75
consume produce 7588

produce 94
consume 88
produce 38
consume 94

This behavior occurs intermittently and is obviously undesired.

Produce numbers using rand() without modulo

Currently, the program produces random numbers between 0 and 100. However, the program requirements state that these random numbers must be between 0 and RAND_MAX. Fortunately, rand() generates numbers between 0 and RAND_MAX by default, so you only need to remove the modulo operation in the source.

For example, instead of this:

bufferItem item = rand() % 100;

Do this:

bufferItem item = rand();

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.