PureBasic

TryLockMutex()

Синтаксис

Result = TryLockMutex(Mutex)

Описание


Делает попытку заблокировать указанный Мьютекс. В отличие от функции LockMutex(), эта функция не приостанавливает выполнение до освобождения Мьютекса. Она немедленно возвращается, а возвращаемое значение показывает, была попытка блокировки успешна или нет. Это полезно в ситуациях, когда поток вместо того что бы ждать освобождения Мьютекса, должен выполнять какие то другие операции.

Параметры

Mutex Номер, идентифицирующий объект Мьютекс, который требуется заблокировать.

Возвращаемое значение

Возвращает не нулевое значение, если Мьютекс был успешно заблокирован, в противном случае 0.

Комментарии

Если блокировка была успешна, следует вызвать функцию UnlockMutex() чтобы освободить Мьютекс для других потоков. Если этого не сделать, это легко может привести в тупиковую ситуацию.

Пример

Procedure ThreadProcedure(*Value)
    Shared Mutex

    Repeat
        If TryLockMutex(Mutex)
            PrintN("Мьютекс успешно заблокирован.")

            UnlockMutex(Mutex)
            Break ; выйти из цикла и потока
        Else
            PrintN("Всё ещё ждём доступа к Мьютексу...")
            Delay(200)
        EndIf
    ForEver
EndProcedure

OpenConsole()

Mutex = CreateMutex()
LockMutex(Mutex) ; главная программа изначально блокирует Мьютекс
Thread = CreateThread(@ThreadProcedure(), 0)

Delay(4000)
UnlockMutex(Mutex) ; теперь освободим Мьютекс, так что поток может получить его
Input()

См. также

UnlockMutex()

Поддерживаемые OS

Все

<- ThreadPriority() - Оглавление Thread - TrySemaphore()->