Function scopedMutexLock
Performs RAII based locking/unlocking of a mutex.
ScopedMutexLock!M scopedMutexLock(M)
(
M mutex,
LockMode mode = LockMode .lock
)
if (is(M : Mutex) || is(M : Lockable));
ScopedMutexLock!(shared(M)) scopedMutexLock(M)
(
shared(M) mutex,
LockMode mode = LockMode .lock
)
if (is(M : Mutex) || is(M : Lockable));
Note that while TaskMutex
can be used with D's built-in synchronized
statement, InterruptibleTaskMutex
cannot. This function provides a
library based alternative that is suitable for use with all mutex types.
Example
import vibe .core .core : runWorkerTaskH;
__gshared int counter;
__gshared TaskMutex mutex;
mutex = new TaskMutex;
Task[] tasks;
foreach (i; 0 .. 100) {
tasks ~= runWorkerTaskH(() nothrow {
auto l = scopedMutexLock(mutex);
counter++;
});
}
foreach (t; tasks) t .join();
assert(counter == 100);