reckfellENGINE

Mutex

Рекурсивная блокировка совместно используемых данных.

На этой странице
class MutexReckfellSharpНаследует RefCounted

Все участники должны защищать одни и те же данные одним Mutex. После Lock() или успешного TryLock() выполните Unlock() в finally. Повторный захват тем же потоком разрешён и требует отдельного освобождения каждого уровня.

Не держите mutex во время WaitToFinish() или ожидания события, которое должен произвести заблокированный worker. Mutex не предоставляет timeout, отмену или обещание справедливого порядка. Потокобезопасные API. Проверены обычный/повторный захват и contention на Windows; стресс и неверный unlock не выполнялись.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

MutexКонструктор
# Mutex
C#
public Mutex();

Создаёт рекурсивный mutex движка. Он защищает только участок, где все участники используют один экземпляр и одинаковый протокол. Не делает весь Resource или EntityTree потокобезопасным. Не Dispose захваченный mutex или объект, который ещё используют workers.

Методы3

Lockvoid
# Lock
C#
public void Lock();

Захватывает mutex, блокируя вызывающий поток при чужом владельце. Тот же поток может захватить повторно; каждый успешный захват требует своего Unlock. Освобождайте в finally. Не держите блокировку во время join/ожидания, если worker должен захватить её для завершения. У метода нет timeout или CancellationToken.

TryLockbool
# TryLock
C#
public bool TryLock();

Пытается захватить без блокирующего ожидания. True означает реальный захват, включая повторный захват владельцем: нужен соответствующий Unlock. False при занятом другим потоком mutex не является ошибкой. Не превращайте повторные TryLock в бесконечный busy loop главного потока.

Возвращает bool

True с приобретённым захватом либо false без захвата.

Unlockvoid
# Unlock
C#
public void Unlock();

Снимает один уровень захвата текущего владельца. Вызывайте ровно для соответствующего успешного Lock/TryLock, из того же потока. Не является общим reset и не позволяет освободить чужой mutex. Ошибочный unlock не выполнялся в QA.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.