This is a modification of Exercise 2 at the end of Chapter 3 of the text. Run race.java and verify that there are no race conditions for M=1000. Explain why you think this is true. Introduce time-slicing with a Scheduler object. Experimentally determine the largest time-slice value passed to the Scheduler object's constructor that will consistently cause incorrect output due to a race condition for M=1000. Report and explain your findings.
Next start with a fixed time-slice of 10 milliseconds using the Scheduler and find the smallest value of M that will consistently cause incorrect output due to a race condition. Report and explain your findings.
Finally answer Exercise 5 at the end of Chapter 3 of the text: Identify the race condition(s) that could occur in Class 3.8 if there were more than one producer thread and/or consumer thread.
Permission is granted to copy and distribute this material for educational purposes only, provided that the following credit line is included: "Concurrent Programming using Java, Copyright 1997 Stephen J. Hartley." Permission is granted to alter and distribute this material provided that the following credit line is included: "Adapted from Concurrent Programming using Java, Copyright 1997 Stephen J. Hartley.