core.sync.mutex
Модуль mutex предоставляет примитив для поддержания взаимоисключающего доступа.
- Лицензия:
- Boost License 1.0
- Авторы:
- Sean Kelly
- Источник
- core/sync/mutex.d
- class Mutex: object.Object.Monitor;
-
Этот класс представляет собой рекурсивный мьютекс общего назначения.
Реализован с использованием
pthread_mutexна Posix иCRITICAL_SECTIONна Windows.- Примеры:
-
import core.thread : Thread; class Resource { Mutex mtx; int cargo; this() shared @safe nothrow { mtx = new shared Mutex(); cargo = 42; } void useResource() shared @safe nothrow @nogc { mtx.lock_nothrow(); (cast() cargo) += 1; mtx.unlock_nothrow(); } } shared Resource res = new shared Resource(); auto otherThread = new Thread( { foreach (i; 0 .. 10000) res.useResource(); }).start(); foreach (i; 0 .. 10000) res.useResource(); otherThread.join(); assert (res.cargo == 20042);
- nothrow @nogc @trusted this();
shared nothrow @nogc @trusted this(); -
Инициализирует объект мьютекса.
- nothrow @nogc @trusted this(Object obj);
shared nothrow @nogc @trusted this(Object obj); -
Инициализирует объект мьютекса и устанавливает его в качестве монитора для
obj.- Входные данные
-
objне должен иметь монитор.
- @trusted void lock();
shared @trusted void lock();
final nothrow @nogc @trusted void lock_nothrow(this Q)()
Constraints: if (is(Q == Mutex) || is(Q == shared(Mutex))); -
Если этот замок не удерживается вызывающим элементом, замок приобретается, а внутренний счётчик увеличивается на единицу.
- Примечание
-
Mutex.lockне вызывает исключений, но класс, производный от Mutex, может. Используйтеlock_nothrowвnothrow @nogcкоде.
- @trusted void unlock();
shared @trusted void unlock();
final nothrow @nogc @trusted void unlock_nothrow(this Q)()
Constraints: if (is(Q == Mutex) || is(Q == shared(Mutex))); -
Уменьшает внутренний счётчик блокировок на единицу. Если это приводит к нулевому значению счётчика, замок освобождается.
- Примечание
-
Mutex.unlockне вызывает исключений, но класс, производный от Mutex, может. Используйтеunlock_nothrowвnothrow @nogcкоде.
- @trusted bool tryLock();
shared @trusted bool tryLock();
final nothrow @nogc @trusted bool tryLock_nothrow(this Q)()
Constraints: if (is(Q == Mutex) || is(Q == shared(Mutex))); -
Если замок удерживается другим вызывающим элементом, метод возвращает значение.
В противном случае замок приобретается, если он еще не удерживается, и затем внутренний счетчик увеличивается на единицу.- Возвращает:
- true, если замок был приобретён, и false, если нет.
- Примечание
-
Mutex.tryLockне вызывает исключений, но класс, производный от Mutex, может. ИспользуйтеtryLock_nothrowвnothrow @nogcкоде.
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/core_sync_mutex.html