synchronized<T> function
Runs the given action
in a critical section, ensuring only one
execution at a time per monitor
object.
This function provides an easy and safe way to serialize access to
a shared resource. It retrieves a lock associated with the monitor
and queues the action
to be executed when it's safe to do so.
Reentrant calls from the same Dart Zone are allowed (i.e., nested
synchronized()
calls on the same monitor will execute immediately).
Example:
final lockTarget = Object();
void criticalWrite() {
synchronized(lockTarget, () {
// only one call at a time per lockTarget
writeToDatabase();
});
}
Implementation
T synchronized<T>(Object monitor, T Function() action) {
final lock = _lockRegistry.getLock(monitor);
return lock.synchronized(action);
}