Spec-Zone.ru › D

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API