Создает мьютекс , который используется для синхронизации выполнения потоков
Синтаксис
Использование
result = MutexCreate
Возвращаемое значение
Возвращается хендл созданного мьютекса с типом
Any Ptr,
или пустой указатель (0) в случае неудачи.
Описание
Мьютексы означают "Взаимоисключение" и являются одним из способов
синхронизации общих данных в потоках. Если есть глобальная переменная ,
используемая несколькими потоками (или локальная переменная используемая в
одном потоке, вызываемая несколько раз), она должна быть "заперта" в ходе ее
использования с помощью мьютекса. Это останавливает все потоки с помощью
MutexLock
для данного мьютекса, пока она не будет разблокирована с помощью
MutexUnlock.
Mutexcreate создает мьютекс, возвращая его хендл, который может\должен
быть использован для блокировки, разблокировки, или уничтожения мьютекс.
Мьютексы созданные с помощью
Mutexcreate должны быть уничтожены,
когда больше не нужны или в конце программы с помощью
MutexDestroy.
Блокировка мьютекса гарантирует три вещи:
1. Атомарность - блокировка мьютекса является атомарной операцией, а это
означает, что операционная система (или многопоточная библиотека)
гарантирует, что если вы заблокировали мьютекс, никакой другой поток не
сможет просматривать этот мьютекс в это же время.
2. Сингулярность - если поток заблокировал мьютекс, то гарантируется, что
никакой другой поток не сможет заблокировать поток до тех пор, пока исходный
поток не освободит блокировку.
3. Ожидание не занятого - если поток пытается заблокировать поток, который был
заблокирован вторым потоком, первый поток будет приостановлен (и не будет
отбирать ресурсы процессора) пока блокировка не освобождается вторым
потоком. В это время, первый поток проснется и продолжит выполнение, имея
мьютекс, заблокированный им.
Пример
Различие диалектов
- Многопоточность не допускается в диалекте -lang qb.
Различие платформ
- В DOS-версии FreeBASIC нет многопоточности, так как операционная
система не поддерживает ее.
- В Linux потоки всегда запускаются в том порядке, котором они были созданы.
В Win32 это невозможно предсказать. Это вопрос операционных систем, а не
FreeBASIC.
Отличия от QB
См. также