패키지 | flash.concurrent |
클래스 | public final class Condition |
상속 | Condition Object |
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.5, AIR 3.5 |
다음은 Condition 객체를 사용하는 작업 과정의 한 예입니다.
- Condition 객체를 사용하기 전에 첫 번째 워커는 Mutex 객체의
lock()
또는tryLock()
메서드를 호출하여 해당 조건과 연결된 뮤텍스의 소유권을 가져와야 합니다. - 워커의 코드는 특정 조건이 거짓이 되기 전까지 공유 리소스에서 작동하므로 해당 워커는 공유 리소스를 사용하여 더 이상의 작업을 수행하지 않게 됩니다. 예를 들어 처리할 데이터 세트가 공유 리소스일 경우 더 이상 처리할 데이터가 없으면 워커는 더 이상의 작업을 수행할 수 없습니다.
- 이 시점에서 Condition 객체의
wait()
메서드를 호출하여 워커의 실행을 일시 정지하고 뮤텍스의 소유권을 해제합니다. - 특정 시점에 두 번째 워커는 뮤텍스의 소유권을 가져옵니다. 이제 뮤텍스를 사용할 수 있으므로 두 번째 워커의 코드는 공유 리소스에서 안전하게 작동할 수 있습니다. 두 번째 워커는 첫 번째 워커가 작업을 다시 수행할 수 있도록 해당 조건을 충족하는 데 필요한 조치를 실행합니다. 예를 들어 첫 번째 워커에게 처리할 데이터가 없을 경우 두 번째 워커는 공유 리소스 안에 처리할 데이터를 더 전달할 수 있습니다.
- 이 시점에서 첫 번째 워커의 작업과 관련된 조건은 참이 되므로 첫 번째 워커는 해당 조건이 충족되었다는 알림을 받아야 합니다. 첫 번째 워커에게 알림을 보내기 위해 두 번째 워커의 코드에서 Condition 객체의
notify()
메서드 또는notifyAll()
메서드를 호출합니다. - 두 번째 워커는
notify()
를 호출하는 한편 뮤텍스의 소유권도 해제해야 합니다. 이 작업은 Mutex 객체의unlock()
메서드를 호출하거나 Condition 객체의wait()
메서드를 호출하여 수행합니다. 첫 번째 워커가wait()
메서드를 호출했으므로 뮤텍스의 소유권은 첫 번째 워커에게 반환됩니다. 그런 다음 첫 번째 워커의 코드 실행은wait()
호출 뒤의 다음 코드 줄에서 재개됩니다.
Condition 클래스는 워커 간에 복사되는 대신 이들 간에 공유되는 특수한 객체 유형의 하나입니다. Worker 객체의 setSharedProperty()
메서드를 호출하거나 MessageChannel 객체를 사용하는 방식으로 워커 간에 조건을 전달하는 경우, 두 워커 모두 런타임의 메모리에서 동일한 Condition 객체를 참조합니다.
관련 API 요소
속성 | 정의 주체 | ||
---|---|---|---|
constructor : Object
지정된 객체 인스턴스의 클래스 객체 또는 생성자 함수에 대한 참조입니다. | Object | ||
isSupported : Boolean [정적] [읽기 전용]
Condition 클래스가 현재 플랫폼에서 지원되는지 여부를 나타냅니다. | Condition | ||
mutex : Mutex [읽기 전용]
이 조건과 연결된 뮤텍스입니다. | Condition |
메서드 | 정의 주체 | ||
---|---|---|---|
새 Condition 인스턴스를 만듭니다. | Condition | ||
지정된 속성이 객체에 정의되어 있는지 여부를 나타냅니다. | Object | ||
Object 클래스의 인스턴스가 매개 변수로 지정된 객체의 프로토타입 체인에 있는지 여부를 나타냅니다. | Object | ||
이 Condition 객체가 나타내는 조건이 충족되었고 뮤텍스의 소유권이 해당 조건이 충족되기를 기다리는 다음 워커에 반환될 것임을 지정합니다. | Condition | ||
이 Condition 객체가 나타내는 조건이 충족되었고 뮤텍스의 소유권이 해당 조건이 충족되기를 기다리는 모든 워커에 반환될 것임을 지정합니다. | Condition | ||
지정된 속성이 존재하고 열거 가능한지 여부를 나타냅니다. | Object | ||
루프 작업에서 동적 속성을 사용할 수 있는지 여부를 설정합니다. | Object | ||
로캘별 규칙에 따라 서식이 지정된 이 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 문자열 표현을 반환합니다. | Object | ||
지정된 객체의 프리미티브 값을 반환합니다. | Object | ||
이 Condition 객체가 나타내는 조건이 충족되지 않았음을 지정하며, 따라서 현재 워커는 코드를 더 실행하려면 이 조건이 충족될 때까지 대기해야 합니다. | Condition |
isSupported | 속성 |
mutex | 속성 |
Condition | () | 생성자 |
notify | () | 메서드 |
public function notify():void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.5, AIR 3.5 |
이 Condition 객체가 나타내는 조건이 충족되었고 뮤텍스의 소유권이 해당 조건이 충족되기를 기다리는 다음 워커에 반환될 것임을 지정합니다.
이 메서드를 호출해도 뮤텍스의 소유권이 자동으로 해제되지 않습니다. notify()
를 호출한 후, 현재 워커에 뮤텍스가 다시 필요하지 않을 경우에는 Mutex.unlock()
메서드를 호출하거나 다른 워커가 작업을 완료한 후 해당 워커가 뮤텍스의 소유권을 다시 가져와야 할 경우에는 wait()
을 호출하는 방식으로 뮤텍스의 소유권을 명시적으로 해제해야 합니다.
뮤텍스의 잠금이 해제되면 wait()
메서드를 호출한 워커의 대기열에 있는 다음 워커는 해당 뮤텍스를 인수하여 코드 실행을 재개합니다.
오류
IllegalOperationError — 현재 워커가 이 조건의 뮤텍스를 소유하지 않는 경우
|
notifyAll | () | 메서드 |
public function notifyAll():void
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.5, AIR 3.5 |
이 Condition 객체가 나타내는 조건이 충족되었고 뮤텍스의 소유권이 해당 조건이 충족되기를 기다리는 모든 워커에 반환될 것임을 지정합니다.
이 메서드를 호출해도 뮤텍스의 소유권이 자동으로 해제되지 않습니다. notify()
를 호출한 후, 현재 워커에 뮤텍스가 다시 필요하지 않을 경우에는 Mutex.unlock()
메서드를 호출하거나 다른 워커가 작업을 완료한 후 해당 워커가 뮤텍스의 소유권을 다시 가져와야 할 경우에는 wait()
을 호출하는 방식으로 뮤텍스의 소유권을 명시적으로 해제해야 합니다.
뮤텍스의 잠금이 해제되면 대기 중인 여러 워커는 wait()
메서드를 호출한 순서에 따라 한 번에 하나씩 소유권을 수신합니다. wait()
메서드를 호출한 각 워커는 차례로 뮤텍스를 인수하여 코드 실행을 재개합니다. 해당 워커가 Mutex.unlock()
메서드 또는 wait()
메서드를 호출하면 뮤텍스 소유권은 대기 중인 다음 워커에 전환됩니다. 뮤텍스 소유권이 워커 간에 전환될 때마다 이러한 전환 작업은 단일 아톰 작업으로 실행됩니다.
오류
IllegalOperationError — 현재 워커가 이 조건의 뮤텍스를 소유하지 않는 경우
|
wait | () | 메서드 |
public function wait(timeout:Number = -1):Boolean
언어 버전: | ActionScript 3.0 |
런타임 버전: | Flash Player 11.5, AIR 3.5 |
이 Condition 객체가 나타내는 조건이 충족되지 않았음을 지정하며, 따라서 현재 워커는 코드를 더 실행하려면 이 조건이 충족될 때까지 대기해야 합니다. 이 메서드를 호출하면 현재 워커의 실행 스레드가 일시 정지되며 해당 조건의 뮤텍스의 소유권이 해제됩니다. 이 단계는 단일 아토믹 작업으로 실행됩니다. 워커는 다른 워커에서 이 Condition 객체의 notify()
또는 notifyAll()
메서드를 호출할 때까지 일시 정지됩니다.
매개 변수
timeout:Number (default = -1 ) — 워커가 작업을 재개하기 전 실행을 일시 정지해야 하는 최대 시간(밀리초) 이 값이 -1(기본값)이면 제한 시간이 없으며 실행은 무기한으로 일시 정지됩니다.
|
Boolean — true 제한 시간이 경과되어 메서드가 반환된 경우 그렇지 않으면 메서드는 false 를 반환합니다.
|
오류
IllegalOperationError — 현재 워커가 이 조건의 뮤텍스를 소유하지 않는 경우
| |
ArgumentError — timeout 인수가 0보다 작고 -1이 아닌 경우
| |
ScriptTimeoutError — 메서드가 Flash Player의 최초 워커 코드에서 호출되고 워커가 스크립트 시간 초과 제한(기본값은 15초)보다 길게 일시 정지되는 경우
| |
Error — 메서드가 호출되고 호출하는 워커의 실행이 일시 정지되는 동안 대기 중인 워커가 종료되는 경우
|
Tue Jun 12 2018, 03:17 PM Z