PureBasic

UnlockMutex()

Синтаксис

UnlockMutex(Mutex)

Описание


Разблокирует Мьютекс, ранее заблокированный функцией LockMutex(). После этого Мьютекс снова доступен для блокировки другими потоками.

Параметры

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

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

Ничего.

Комментарии

Разблокировать Мьютекс может только тот поток, который его заблокировал.

Пример

; Выполните этот код как есть. Вы увидите, что напечатанные строки
; от разных потоков перемешаны. Теперь раскомментируйте функции работы с Мьютексом и
; строки напечатаются по порядку, потому что одновременно только один поток
; имеет право выполнять функции печати.
;
Procedure WithoutMutex(*Number)
    Shared Mutex

    For a = 1 To 5
        ;LockMutex(Mutex) ; раскомментируйте это и увидите разницу, отсюда код будет защищён Мьютексом

        PrintN("Поток "+Str(*Number)+": Trying to print 5x in a row:")
        For b = 1 To 5
            Delay(50)
            PrintN("Поток "+Str(*Number)+" Line "+Str(b))
        Next b

        ;UnlockMutex(Mutex) ; раскомментируйте это и увидите разницу, до этой строчки код будет защищён Мьютексом
    Next a
EndProcedure

OpenConsole()
Mutex = CreateMutex() ; создаём Мьютекс и запоминаем его Номер в переменную Mutex, он будет использован в функциях блокировки

thread1 = CreateThread(@WithoutMutex(), 1)
Delay(25)
thread2 = CreateThread(@WithoutMutex(), 2)
Delay(25)
thread3 = CreateThread(@WithoutMutex(), 3)

WaitThread(thread1)
WaitThread(thread2)
WaitThread(thread3)

Input()

См. также

LockMutex(), CreateMutex()

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

Все

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