Add documentation and unittest example to scopedMutexLock.
This commit is contained in:
parent
fb64c07d3c
commit
6c0bdf2976
|
@ -33,12 +33,42 @@ shared(ManualEvent) createSharedManualEvent()
|
|||
return shared(ManualEvent).init;
|
||||
}
|
||||
|
||||
|
||||
/** Performs RAII based locking/unlocking of a mutex.
|
||||
|
||||
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.
|
||||
*/
|
||||
ScopedMutexLock!M scopedMutexLock(M)(M mutex, LockMode mode = LockMode.lock)
|
||||
if (is(M : Mutex) || is(M : Lockable))
|
||||
{
|
||||
return ScopedMutexLock!M(mutex, mode);
|
||||
}
|
||||
|
||||
///
|
||||
unittest {
|
||||
import vibe.core.core : runWorkerTaskH;
|
||||
|
||||
__gshared int counter;
|
||||
__gshared InterruptibleTaskMutex mutex;
|
||||
|
||||
mutex = new InterruptibleTaskMutex;
|
||||
|
||||
Task[] tasks;
|
||||
|
||||
foreach (i; 0 .. 100) {
|
||||
tasks ~= runWorkerTaskH({
|
||||
auto l = scopedMutexLock(mutex);
|
||||
counter++;
|
||||
});
|
||||
}
|
||||
|
||||
foreach (t; tasks) t.join();
|
||||
|
||||
assert(counter == 100);
|
||||
}
|
||||
|
||||
unittest {
|
||||
scopedMutexLock(new Mutex);
|
||||
scopedMutexLock(new TaskMutex);
|
||||
|
|
Loading…
Reference in a new issue