패키지 | flash.concurrent |
클래스 | public final class Mutex |
상속 | Mutex Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.5, AIR 3.5 |
shareable
속성이 true
인 ByteArray 객체)에 액세스하는 여러 워커에서 코드를 관리하는 데 사용됩니다. 또한 Mutex는 AIR 기본 확장 또는 파일 시스템 파일 등의 공유 가능 리소스에 대한 워커의 액세스를 관리하는 데 사용할 수도 있습니다. 뮤텍스의 목적은 리소스의 종류에 관계없이 해당 리소스에 한 번에 하나의 코드 세트만 액세스하도록 하는 데 있습니다.
뮤텍스는 리소스 소유권의 개념을 활용하여 액세스를 관리합니다. 임의의 시점에서 하나의 뮤텍스는 최대 하나의 워커에 의해 "소유"됩니다. 뮤텍스의 소유권이 워커 간에 전환될 때 이러한 전환 작업은 아톰 단위로 이루어집니다. 따라서 둘 이상의 워커에서 단일 뮤텍스의 소유권을 가져오는 것은 절대 불가능합니다. 뮤텍스를 소유하는 하나의 워커 내 코드가 공유 리소스에서만 작동하는 한, 다중 워커 간의 충돌은 결코 발생하지 않는다고 보장할 수 있습니다.
가능한 경우 tryLock()
메서드를 사용하여 뮤텍스의 소유권을 가져옵니다. lock()
메서드를 사용하여 현재 워커의 실행을 뮤텍스가 사용 가능해질 때까지 일시 정지한 다음, 해당 뮤텍스의 소유권을 가져옵니다. 현재 워커가 뮤텍스의 소유권을 얻게 되면 공유 리소스에서 안전하게 작동할 수 있습니다. 모든 작업이 완료되면 unlock()
메서드를 호출하여 뮤텍스를 해제합니다. 이 시점부터 현재 워커는 더 이상 공유 리소스에 액세스해서는 안 됩니다.
Mutex 클래스는 워커 간에 복사되는 대신 이들 간에 공유되는 특수한 객체 유형의 하나입니다. Worker 객체의 setSharedProperty()
메서드를 호출하거나 MessageChannel 객체를 사용하는 방식으로 워커 간에 뮤텍스를 전달하는 경우, 두 워커 모두 런타임의 메모리에서 동일한 Mutex 객체를 참조합니다.
관련 API 요소
메서드 | 정의 주체 | ||
---|---|---|---|
Mutex()
새 Mutex 인스턴스를 만듭니다. | Mutex | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
현재 워커의 실행을 이 뮤텍스가 사용 가능해질 때까지 일시 정지한 다음 해당 뮤텍스의 소유권을 가져옵니다. | Mutex | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
가능한 경우 뮤텍스의 소유권을 인수합니다. | Mutex | ||
이 뮤텍스의 소유권을 해제하여 어떤 워커든 이 뮤텍스를 인수하여 관련 리소스에서 작업을 수행할 수 있도록 허용합니다. | 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 |
현재 워커의 실행을 이 뮤텍스가 사용 가능해질 때까지 일시 정지한 다음 해당 뮤텍스의 소유권을 가져옵니다. lock()
이 호출될 때 다른 워커에서 뮤텍스를 소유하고 있는 경우, 호출하는 워커의 실행 스레드는 lock()
호출 시 일시 정지되고 해당 워커는 소유권 요청 대기열에 추가됩니다. 호출하는 워커에서 뮤텍스를 인수하면 해당 워커는 lock()
호출 뒤의 코드 줄에서 실행을 계속합니다.
현재 워커가 뮤텍스의 소유권을 얻게 되면 공유 리소스에서 안전하게 작동할 수 있습니다. 모든 작업이 완료되면 unlock()
메서드를 호출하여 뮤텍스를 해제합니다. 이 시점부터 현재 워커는 더 이상 공유 리소스에 액세스해서는 안 됩니다.
내부적으로 뮤텍스는 수신된 잠금 요청의 개수를 보관하고 있습니다. 뮤텍스는 이와 동일한 수만큼 잠금 해제 요청을 수신해야 완전히 해제됩니다. 뮤택스를 소유한 워커의 코드에서 lock()
메서드를 호출하여 뮤텍스를 다시 잠글 경우 내부 잠금 개수는 1만큼 증가합니다. 뮤텍스의 소유권을 해제하려면 잠금 요청 수만큼 unlock()
메서드를 호출해야 합니다.
여러 워커에서 하나의 뮤텍스가 해제되기를 기다리는 경우 해당 뮤텍스는 가장 오래 대기한 워커에 소유권 할당의 우선권을 부여합니다. 그러나 워커 스레드의 일정은 호스트 운영 체제에서 관리하므로 여러 워커 사이에서 특정한 코드 실행 순서는 보장되지 않습니다.
tryLock | () | 메서드 |
public function tryLock():Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.5, AIR 3.5 |
가능한 경우 뮤텍스의 소유권을 인수합니다. 다른 워커에서 이미 뮤텍스를 소유하고 있거나 lock()
메서드를 호출하여 뮤텍스의 인수를 기다리고 있는 경우 해당 뮤텍스는 사용 가능한 상태가 아닙니다. 그러한 경우 이 메서드를 호출하면 false
가 반환되고 코드 실행은 즉시 계속됩니다.
현재 워커가 뮤텍스의 소유권을 얻게 되면 공유 리소스에서 안전하게 작동할 수 있습니다. 모든 작업이 완료되면 unlock()
메서드를 호출하여 뮤텍스를 해제합니다. 이 시점부터 현재 워커는 더 이상 공유 리소스에 액세스해서는 안 됩니다.
여러 워커에서 하나의 뮤텍스가 해제되기를 기다리는 경우 해당 뮤텍스는 가장 오래 대기한 워커에 소유권 할당의 우선권을 부여합니다. 그러나 워커 스레드의 일정은 호스트 운영 체제에서 관리하므로 여러 워커 사이에서 특정한 코드 실행 순서는 보장되지 않습니다.
반환값Boolean — 뮤텍스가 사용 가능한 상태이고 현재 워커에 소유된 경우 true 이며 현재 워커에서 뮤텍스의 소유권을 인수하지 않은 경우 false 입니다.
|
unlock | () | 메서드 |
public function unlock():void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.5, AIR 3.5 |
이 뮤텍스의 소유권을 해제하여 어떤 워커든 이 뮤텍스를 인수하여 관련 리소스에서 작업을 수행할 수 있도록 허용합니다.
내부적으로 뮤텍스는 수신된 잠금 요청의 개수를 보관하고 있습니다. 뮤텍스의 소유권을 해제하려면 워커 내 코드에서 잠금 요청 수만큼 unlock()
메서드를 호출해야 합니다.
오류
IllegalOperationError — 현재 워커가 뮤텍스를 소유하지 않을 때
|
Tue Jun 12 2018, 03:17 PM Z