Справочник по ActionScript® 3.0 для платформы Adobe® Flash®
Домашняя страница  |  Скрыть список пакетов и классов |  Пакеты  |  Классы  |  Что нового  |  Указатель  |  Приложения  |  Почему по-английски?
Фильтры: Получение данных с сервера...
Получение данных с сервера...
flash.concurrent 

Mutex  - AS3

Пакетflash.concurrent
Классpublic final class Mutex
НаследованиеMutex Inheritance Object

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.5, AIR 3.5

Класс Mutex (сокращение от «взаимное исключение») позволяет гарантировать, что в каждый момент времени только один набор кода обращается к определенному блоку памяти или другому общему ресурсу. Класс Mutex в первую очередь используется для управления кодом в разных потоках worker, которые обращаются к общему массиву байт (объекту ByteArray, свойство 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



Общедоступные свойства
 СвойствоОпределено
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
Общедоступные методы
 МетодОпределено
  
Создает новый экземпляр Mutex.
Mutex
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
  
Приостанавливает выполнение текущего потока worker, пока это взаимное исключение не станет доступным, а затем принимает право владения этим взаимным исключением.
Mutex
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
  
Получает право владения взаимным исключением, если оно доступно.
Mutex
  
Освобождает право владения данным взаимным исключением, позволяет потоку worker принять его и выполнять операции со связанным ресурсом.
Mutex
 Inherited
Возвращает элементарное значение заданного объекта.
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.

Возвращает
Booleantrue, если взаимное исключение доступно (и теперь им владеет текущий поток worker), или false, если текущий поток worker не принял право владения взаимным исключением.

unlock

()метод 
public function unlock():void

Язык версии: ActionScript 3.0
Версии среды выполнения: Flash Player 11.5, AIR 3.5

Освобождает право владения данным взаимным исключением, позволяет потоку worker принять его и выполнять операции со связанным ресурсом.

Во внутреннем порядке взаимное исключение отслеживает количество полученных запросов блокировки. Чтобы освободить право владения взаимным исключением, код в потоке worker должен вызвать метод unlock() столько раз, сколько отправлено запросов на блокировку.


Выдает
IllegalOperationError — когда текущий поток worker не владеет взаимным исключением.




[ X ]Почему по-английски?
Содержимое Справочника ActionScript 3.0 отображается на английском языке

Не все части Справочника ActionScript 3.0 переводятся на все языки. Если какой-то текстовый элемент не переведен, он отображается на английском языке. Например, компонент ga.controls.HelpBox не переведен ни на один из языков. Это значит, что в русской версии справки компонент ga.controls.HelpBox будет отображаться на английском языке.