Test your code to make sure that the synchronization works and that both the consumer and producer threads don’t violate minimum/maximum capacity requirements irrespectively of the order these threads start.

Using the code from the project chapter21\MicrosoftMonitorSample\MicrosoftMonitorSample.csproj, create a C# program that more realistically simulates the consumer/producer situation:

  1. Add a synchronized method to the class Cell to check if the cellContents field reached the maximum capacity (interpretation – the warehouse is full)Invokethis method in the WriteToCell methodto stop producing new products and to wait until the cellContents field has been decremented by the consumerthread below this maximum capacity.

 

  1. Add another synchronized method to the class Cell to check if the cellContents field reached the minimum capacity (interpretation – the warehouse is empty). Invokethis method in the ReadFromCell methodto stop consuming new products and to wait until the cellContents field has been incremented by the producer thread above the minimum capacity.

 

  1. Add an int parameter to the WriteToCell method to represent the number of items manufactured by the producer (interpretation – the producer may produce more than one item) and adjust the loop in the ThreadProdRunmethod to call the WriteToCell method passinga different int parameter valueeach time (e.g. use random selection) in the range from the minimum cell capacity defined in the requirement 2 above to the maximum cell capacity defined in the requirement 1 above. Select the number of the loop’s iterations so that your testing produces meaningful results. Adjust the WriteToCell method so, that every time the method is called, the cellContents field is incremented by the int value (representing the number of items manufactured by the producer) passed as an argument to this method. Make sure that the maximum capacity is not exceeded.

 

  1. Add an int parameter to the ReadFromCell method to represent the number of items consumed by the consumer (interpretation – the consumer may consume more than one item) and adjust the loop in the ThreadConsRun method to call the ReadFromCell method passinga different int parameter valueeach time (e.g. use random selection) in the range from the minimum cell capacity defined in the requirement 2 above to maximum cell capacity defined in the requirement 1 above. Select the number of the loop’s iterations so that your testing produces meaningful results. Adjust the ReadFromCell method so, that every time the method is called, the cellContents field is decremented by the int value (representing the number of items consumed by the consumer) passed as an argument to this method. Make sure that the cellContents field does not fall below minimum capacity.

 

  1. Modify the Main() method to allow to start the consumer and producer threads in any order.

 

  1. Test your code to make sure that the synchronization works and that both the consumer and producer threads don’t violate minimum/maximum capacity requirements irrespectively of the order these threads start.

  1. Justify and include into the report the selection of the synchronization techniques for the methods created to satisfy requirements 1 – 4 above.

 

 

  1. Your code should provide detailed output of the execution results.