CreateMutex()
Синтаксис
Mutex = CreateMutex()
Описание
Создаёт новый объект Мьютекс. Мьютекс изначально является разблокированным.
Основное предназначение Мьютекса - синхронизация между потоками. Они не потребляют много процессорного времени, но работают только в рамках текущей программы (невозможно синхронизировать потоки нескольких разных программ). Мьютекс это объект (разновидность Семафора), которым может завладеть только один поток одновременно, поэтому он используется для предотвращения одновременного доступа нескольких потоков к одним и тем же данным. Только владеющий Мьютексом поток имеет доступ к данному файлу, области памяти, участку кода...
Например, если Вам требуется, чтобы определённый код мог выполняться не больше чем одним потоком одновременно, создайте Мьютекс с помощью команды var1=CreateMutex(), и поместите требуемый участок кода между командами LockMutex(var1) и UnlockMutex(var1).
Тогда команда LockMutex(var1) позволит использовать защищаемый участок кода только одному потоку, остальные потоки остановятся на входе и будут ждать своей очереди, она наступит, когда текущий поток минует команду UnlockMutex(var1) и тем самым освободит участок кода для следующего потока из очереди.
Больше информации про блокировку/разблокировку Мьютекса можно почитать в описании выше названных функций.
Параметры
Нет.
Возвращаемое значение
Возвращает идентификационный Номер Мьютекса, если он был успешно создан, в противном случае 0.
Пример
; Выполните этот код как есть. Вы увидите, что напечатанные строки ; от разных потоков перемешаны. Теперь раскомментируйте функции работы с Мьютексом и ; строки напечатаются по порядку, потому что одновременно только один поток ; имеет право выполнять функции печати. ; 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()
Поддерживаемые OS
Все