Shared objects that force mutual exclusion on threads that try to call it are “safe objects”. The mutual exclusion on threads/operations can be relaxed when threads don’t change any data, this may be a read of the data in the “safe object” (Sanden, 2011). In the examples for this course, we have dealt with such Java “safe objects” which are called synchronized.
- A safe object in a jukebox represents the CD player. Customer threads call an operation to queue up to play a song.
-
- Input into Song Queue: data can be added by multiple people on multiple devices that only have one set of CDs, and can only play one song from a CD. Data is stored in an array.
- Change Song order in the Queue: The Song Queue can be prioritized based on predefined parameters, like the DJ, can have ultimate priority to adjust the order and make their own request, but customers have a less priority. If there is a tiered pay structure then we can see a higher priority placed on a Song on the Song Queue for those willing to pay more. This means that the data stored in the array can be rearranged depending on the thread’s priority.
- Remove Song from Queue: after the song is done playing, the song’s name is removed from the Song Queue position number one. This will force the array values to shift up by one.
- Read Song Queue: though not needed to be mutually exclusive, it is still an operation that is needed in order to find the next song to play. This shouldn’t change any data in the array, it is only reading the song in position 0 of the array.
- In a different design, the safe object in a jukebox represents a queue of song requests. Customer threads call an operation to add a song request to the queue. A CD thread calls a different operation to retrieve the next request.
-
- All of those that are required for a song queue in the previous example could be applied to this example or a subset. An example of a sufficient subset would be {Input into Song Queue, Remove Song from Queue, Read Song Queue}
-
- Locate the next CD request: Based on the data in Input into Song Queue, pull, locate the CD containing the next Song to be played.
- Play Song on CD: One song from one CD can be played at any time.
- Transition Song on CD: As one song ends, fade out the noise exponentially in the last 10 seconds and begin the next song on the Song Queue by increasing the song volume exponentially in the first 5 seconds to normal volume.
- Put away the CD from the last song played: places the cd back into its predetermined location for future use. Once completed it will call on the Locate next CD Request Safe Operation.
References:
- Sandén, B. I. (2011-01-14). Design of Multithreaded Software: The Entity-Life Modeling Approach, 1st Edition. [VitalSource Bookshelf Online]. Retrieved from https://bookshelf.vitalsource.com/#/books/9781119143086/