This provids a exclusive write lock and shared read-only locks.
Request for exclusive lock can gracefully interrupt multiple parallel loops acquiring shared locks.
- Literally mutually exclusive lock, for read/ write user of resources.
- Shared locks, for read-only users.
- Eclusive critical section helper with retrun value.
- Shared critical section helper with return value.
import 'simple_mutex/simple_mutex.dart';
Declaration.
final mutex = Mutex();
Protect asynchronous critical section with mutually exclusive lock.
await mutex.lock();
try {
// Some mutually exclusive asynchronous critical section.
// This prevent entering other mutually exclusive/ shared critical sections.
} finally {
mutex.unlock();
}
Protect asynchronous critical section with shared lock.
await mutex.lockShared();
try {
// Some shared asynchronous critical section.
// This prevent entering other mutually exclusive critical sections.
// On the other hand, this can be run in parallel with other shared
// critical sections.
} finally {
mutex.unlockShared();
}
To avoid leaking lock in exceptional cases, critical
and criticalShared
are recommended.
Lint unawaited_futures
is also recommended, because if you miss await
for critical
or criticalShared
, memory would be exhausted.