Пакет | flash.concurrent |
Класс | public final class Mutex |
Наследование | Mutex Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.5, AIR 3.5 |
shareable
которого имеет значение true
). Однако класс Mutex также можно использовать для управления доступом потоков worker к любому общему ресурсу, такому как встроенное расширение AIR или файл из файловой системы. Независимо от типа ресурса взаимное исключение используется для обеспечения того, чтобы только один набор кода обращался к ресурсу в каждый момент времени.
Взаимное исключение управляет доступом на основе концепции права владения ресурсом. В любой момент времени одно взаимное исключение «принадлежит» только одному потоку worker. Когда право владения передается от одного потока worker другому, такая передача осуществляется атомарно. Это гарантирует, что в каждый момент времени только один поток worker может владеть взаимным исключением. При условии что код потока worker обращается к общему ресурсу, только когда он владеет взаимным исключением, можно гарантировать отсутствие конфликтов при использовании нескольких потоков worker.
Используйте метод tryLock()
, чтобы принять право владения взаимным исключением, если оно становится доступным. Используйте метод lock()
, чтобы приостановить выполнение текущего потока worker, пока не станет доступным взаимное условие, а затем принять право владения этим взаимным условием. Когда текущий поток worker получит право владения взаимным исключением, он сможет безопасно осуществлять операции с общим ресурсом. Когда эти операции выполнены, вызовите метод unlock()
, чтобы освободить взаимное исключение. На этом этапе текущий поток worker больше не должен обращаться к общему ресурсу.
Класс Mutex относится к типу объектов, которые используются совместно потоками worker, а не копируются между ними. Когда взаимное исключение передается от одного потока worker другому путем вызова метода setSharedProperty()
объекта Worker или с помощью объекта MessageChannel, оба потока worker располагают ссылками на один и тот же объект Mutex в памяти среды выполнения.
Связанные элементы API
Метод | Определено | ||
---|---|---|---|
Mutex()
Создает новый экземпляр Mutex. | Mutex | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Приостанавливает выполнение текущего потока worker, пока это взаимное исключение не станет доступным, а затем принимает право владения этим взаимным исключением. | Mutex | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Получает право владения взаимным исключением, если оно доступно. | Mutex | ||
Освобождает право владения данным взаимным исключением, позволяет потоку worker принять его и выполнять операции со связанным ресурсом. | Mutex | ||
Возвращает элементарное значение заданного объекта. | Object |
Mutex | () | Конструктор |
public function Mutex()
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.5, AIR 3.5 |
Создает новый экземпляр Mutex.
Выдает
Error — если не удалось инициализировать взаимное исключение.
|
lock | () | метод |
public function lock():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.5, AIR 3.5 |
Приостанавливает выполнение текущего потока worker, пока это взаимное исключение не станет доступным, а затем принимает право владения этим взаимным исключением. Если другой поток worker владеет взаимным исключением, когда вызывается метод lock()
, то выполнение вызывающего потока worker приостанавливается при вызове lock()
и он добавляется в очередь запросов права владения. Когда вызывающий поток worker получает взаимное исключение, его выполнение продолжается со строки кода, которая следует после вызова lock()
.
Когда текущий поток worker получит право владения взаимным исключением, он сможет безопасно осуществлять операции с общим ресурсом. Когда эти операции выполнены, вызовите метод unlock()
, чтобы освободить взаимное исключение. На этом этапе текущий поток worker больше не должен обращаться к общему ресурсу.
Во внутреннем порядке взаимное исключение отслеживает количество полученных запросов блокировки. Взаимное исключение должно получить такое же количество запросов разблокировки, прежде чем оно будет полностью освобождено. Если код в потоке worker, который владеет взаимным исключением, снова его блокирует (путем вызова метода lock()
), внутренний счетчик блокировки увеличивается на единицу. Чтобы освободить право владения взаимным исключением, метод unlock()
необходимо вызвать столько раз, сколько отправлено запросов на блокировку.
Когда несколько потоков worker ожидают взаимного исключения, приоритет отдается тому потоку worker, который ожидает дольше остальных. Однако планированием потоков worker управляет операционная система хоста, поэтому нельзя гарантировать определенный порядок выполнения кода потоков worker.
tryLock | () | метод |
public function tryLock():Boolean
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.5, AIR 3.5 |
Получает право владения взаимным исключением, если оно доступно. Если другой поток worker уже владеет взаимным исключением или другой поток worker вызвал метод lock()
и ожидает получения взаимного исключения, то оно недоступно. В таком случае вызов этого метода возвращает false
, после чего сразу продолжается выполнение кода.
Когда текущий поток worker получит право владения взаимным исключением, он сможет безопасно осуществлять операции с общим ресурсом. Когда эти операции выполнены, вызовите метод unlock()
, чтобы освободить взаимное исключение. На этом этапе текущий поток worker больше не должен обращаться к общему ресурсу.
Когда несколько потоков worker ожидают взаимного исключения, приоритет отдается тому потоку worker, который ожидает дольше остальных. Однако планированием потоков worker управляет операционная система хоста, поэтому нельзя гарантировать определенный порядок выполнения кода потоков worker.
ВозвращаетBoolean — true , если взаимное исключение доступно (и теперь им владеет текущий поток worker), или false , если текущий поток worker не принял право владения взаимным исключением.
|
unlock | () | метод |
public function unlock():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.5, AIR 3.5 |
Освобождает право владения данным взаимным исключением, позволяет потоку worker принять его и выполнять операции со связанным ресурсом.
Во внутреннем порядке взаимное исключение отслеживает количество полученных запросов блокировки. Чтобы освободить право владения взаимным исключением, код в потоке worker должен вызвать метод unlock()
столько раз, сколько отправлено запросов на блокировку.
Выдает
IllegalOperationError — когда текущий поток worker не владеет взаимным исключением.
|
Tue Jun 12 2018, 11:34 AM Z