monitor pattern is a multithreading pattern to help prevent race conditions and deadlocks.
associate a single lock with a collection of variables (a “class”), having one lock associated with the group.
any time when you want to access anything in that group, you unlock the mutex associated with the group. meaning, there’s only one mutex which can be used to change shared state.
Bridge Crossing
There is cars that are crossing a one lane bridge: each car in a thread, they have to coordinate when/where to cross the bridge.
Car can be going east or the west. All cars must be traveling in the same direction. And a car can only go once the coast is clear.
Interface
static void cross_bridge_east(size_t carid) {
approach_bridge(); // sleeping
driveAcross(EAST); // sleeping
}
static void cross_bridge_west(size_t carid) {
approach_bridge(); // sleeping
driveAcross(WEST); // sleeping
}
we need to ensure that, we are sharing a one lane bridge, and they don’t collide.
Monitor Pattern
REDUCES NUMBER OF PARAMS!
Method for the mutex management system isolated into a single, thread-safe class. All the mutexes, etc., all of the mutex gunk gets isolated into a thread safe instance method of the bridge class.