MutexCreate
 
Создает мьютекс , который используется для синхронизации выполнения потоков

Синтаксис

Declare Function MutexCreate ( ) As Any Ptr

Использование

result = MutexCreate

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

Возвращается хендл созданного мьютекса с типом Any Ptr, или пустой указатель (0) в случае неудачи.

Описание

Мьютексы означают "Взаимоисключение" и являются одним из способов синхронизации общих данных в потоках. Если есть глобальная переменная , используемая несколькими потоками (или локальная переменная используемая в одном потоке, вызываемая несколько раз), она должна быть "заперта" в ходе ее использования с помощью мьютекса. Это останавливает все потоки с помощью MutexLock для данного мьютекса, пока она не будет разблокирована с помощью MutexUnlock.

Mutexcreate создает мьютекс, возвращая его хендл, который может\должен быть использован для блокировки, разблокировки, или уничтожения мьютекс. Мьютексы созданные с помощью Mutexcreate должны быть уничтожены, когда больше не нужны или в конце программы с помощью MutexDestroy.

Блокировка мьютекса гарантирует три вещи:
1. Атомарность - блокировка мьютекса является атомарной операцией, а это означает, что операционная система (или многопоточная библиотека) гарантирует, что если вы заблокировали мьютекс, никакой другой поток не сможет просматривать этот мьютекс в это же время.
2. Сингулярность - если поток заблокировал мьютекс, то гарантируется, что никакой другой поток не сможет заблокировать поток до тех пор, пока исходный поток не освободит блокировку.
3. Ожидание не занятого - если поток пытается заблокировать поток, который был заблокирован вторым потоком, первый поток будет приостановлен (и не будет отбирать ресурсы процессора) пока блокировка не освобождается вторым потоком. В это время, первый поток проснется и продолжит выполнение, имея мьютекс, заблокированный им.

Пример

Смотрите пример ThreadCreate.

Различие диалектов

  • Многопоточность не допускается в диалекте -lang qb.

Различие платформ

  • В DOS-версии FreeBASIC нет многопоточности, так как операционная система не поддерживает ее.
  • В Linux потоки всегда запускаются в том порядке, котором они были созданы. В Win32 это невозможно предсказать. Это вопрос операционных систем, а не FreeBASIC.

Отличия от QB

  • Новое в FreeBASIC

См. также