Files
p-w-rs 6d881b3edd stuff
2022-09-21 12:04:48 -05:00
..
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00
2022-09-21 12:04:48 -05:00

Producer/Consumer with condition variable examples

CS3841 examples for producer/consumer that motivate the need for condition variables

  • prod_con1.c - Producer and consumer with unlimited sized buffer
    Works with a single semaphore to count full slots when only a single producer and consumer is used

  • prod_con2.c - Producer and consumer with unlimited sized buffer
    Shows a problem that can arise when multiple consumers are consuming elements from the shared space at the same time
    With no controlled access between consumers, the number of elements in the shared space become incorrect

  • prod_con3.c - Producer and consumer with unlimited sized buffer
    Fixes the problem when multiple producers and consumers modify a shared space by using a mutex lock to prevent threads from modifying the space at the same time

  • prod_con4.c - Producer and consumer with unlimited sized buffer
    Shows a problem that can arise when a consumer wants to consume multiple items from the shared space. Since a mutex lock is used to lock out other threads, it is possible for a consumer to remove elements from an empty shared space

  • prod_con5.c - Producer and consumer with unlimited sized buffer
    An attempt to fix the problem of a consumer removing from an empty shared space when more than one item is to be consumed by waiting in a while loop until enough elements are in the space
    Unfortunately causes deadlock since the consumer is holding the the mutex lock while waiting for more items

  • prod_con6.c - Producer and consumer with unlimited sized buffer
    An attempt to fix the problem of a consumer removing from an empty shared space when more than one item is to be consumed by waiting in a while loop until enough elements are in the space.
    Attemps to fix the deadlock provlem in prod_cons5.c by releasing the lock
    Unfortunately the consumer releasing the lock in the while loop causes undefined behavior

  • prod_con7.c - Producer and consumer with unlimited sized buffer
    An attempt to fix the problem of a consumer removing from an empty shared space when more than one item is to be consumed by releasing the lock on the shared space and then waiting on a semaphore until there are more items.
    Unfortunately, there is know way for the consumer to get back into the "head of the line" after more items are produced. Another consumer can skip ahead

  • prod_con_cond1.c - Producer and consumer with unlimited sized buffer
    Uses a condition variable to ensure proper order of the consumers when they wait for more items to be consumed
    Unfortunately, using a single condition variable without additional mutual exculsion does not maintain the consumers order in line

  • prod_con_cond2.c - Producer and consumer with unlimited sized buffer
    Uses a condition variable to ensure proper order of the consumers when they wait for more items to be consumed
    Also uses a mutex to control the ordering of consumers
    This example provides correct behavior when there are multiple producers and multiple consumers and each consumer orders multiple items.