reckfellENGINE

Semaphore

Счётчик разрешений для пробуждения workers.

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

Новый Semaphore имеет ноль разрешений. Post(n) добавляет n; Wait() и успешный TryWait() расходуют одно. Поэтому TryWait() — не пассивная проверка готовности.

Данные очереди храните отдельно. Перед Dispose согласованно завершите workers: stop-флаг, Post для выхода из ожидания, затем join. Ожидание на главном потоке может остановить игру. Потокобезопасные API. Проверены подсчёт, оба Post и пробуждение на Windows; FIFO, стресс и builds без потоков не подтверждены.

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

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

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

Создаёт счётчик с нулём разрешений. Wait блокируется без разрешения; Post добавляет, а Wait/TryWait расходуют по одному. Это не очередь данных и не рекурсивный mutex с владельцем. Храните данные отдельно под согласованной защитой; завершите всех ожидающих workers до Dispose.

Методы4

Post2 перегрузки
# Post · 1/2
C#
public void Post();

Добавляет положительное число разрешений; без аргумента — одно. Если никто не ждёт, разрешения сохраняются для будущего Wait/TryWait. Не гарантирует FIFO или немедленное выполнение конкретного потока. count<=0 даёт native-диагностику; метод не возвращает Error. Для остановки worker после изменения stop-флага разбудите его, затем join; один Post не завершает произвольную работу.

# Post · 2/2
C#
public void Post(int count = 1);

Добавляет положительное число разрешений; без аргумента — одно. Если никто не ждёт, разрешения сохраняются для будущего Wait/TryWait. Не гарантирует FIFO или немедленное выполнение конкретного потока. count<=0 даёт native-диагностику; метод не возвращает Error. Для остановки worker после изменения stop-флага разбудите его, затем join; один Post не завершает произвольную работу.

Параметры
ИмяТипПо умолчанию
countint1
count

Положительное число добавляемых разрешений, по умолчанию 1; не ID worker.

TryWaitbool
# TryWait
C#
public bool TryWait();

Неблокирующе расходует одно разрешение, если оно есть. True означает, что счётчик уменьшился; False — сейчас разрешений нет. Это не просто чтение готовности без побочного эффекта. Успешный TryWait не требует второго Wait или возврата разрешения, если ваш протокол этого не предусматривает.

Возвращает bool

True с расходованием одного разрешения либо false без изменения.

Waitvoid
# Wait
C#
public void Wait();

Блокирует вызывающий поток до доступного разрешения и расходует одно. Может ждать бесконечно: нет timeout/отмены в этом API. Не используйте на главном потоке без гарантированного источника Post; исключите зависимости от уже заблокированного потока. Перед освобождением Semaphore разбудите и завершите всех workers.

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

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

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

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