2011-02-13 4 views
3

내가 경쟁 조건의 몇 가지 증거를 가지고 [참고 : 아래 업데이트보기] 특정 객체 메소드 호출했다있는 액션 스크립트 3 (AS3) 프로그램 :액션 스크립트 3 (AS3) 동시성 모델

  1. 을 동영상 클립의 타임 라인

AS3에서 동시성 모델은 무엇인가에 프레임에 추가하는 스크립트에서 비동기 다운로드 이벤트를

  • 을 처리? 이벤트 핸들링이 직렬화되어 있습니까 (즉, 기본 멀티 스레딩에도 불구하고 각 이벤트 핸들러가 다른 이벤트 다음에 완료 될 때까지 각 핸들러가 실행됩니다)? 그리고 그 프레임에있는 스크립트는 그 이벤트 스트림으로 직렬화됩니까? 나는 그 마지막 질문에 대한 답이 부정적이라고 생각한다.

    경쟁 조건이 발생했는지 여부를 체계적으로 기록하기위한 조치를 취하고 있지만 AS3이 제공하는 보증 항목 (있는 경우)을 확인하는 것이 좋습니다.

    업데이트 : 내 이벤트 핸들러에서 이벤트 핸들러가 이미 특정 관심 객체에서 처리되고 있는지 여부를 기록하기 위해 간단한 확인을 수행했으며 입니다. 즉 경쟁 조건이 가능합니다. 다른 사람이이 문제를 겪었습니까? 당신은 그것에 대해 무엇을 했습니까?!

  • 답변

    0

    There is no "real" concurrency in Flash - 이벤트 처리를 포함하여 모든 일정은 기본 타임 라인에 의해 결정됩니다. 모든 작업은 코드에 지정된 순서대로 수행해야합니다.

    물론 "비동기식으로 시작한"결과를 기반으로한다면 문제가 발생할 수 있습니다 (이 용어는 엄격한 의미에서는 정확하지 않지만이 용어를 사용하려고합니다). 다른 하나는 이벤트 핸들러를 사용할 때 발생할 수 있습니다. 프로그래밍 방식으로 이러한 문제를 직접 해결할 수있는 방법을 찾아야합니다. ActionScript에는 동기화 된 또는 원자 단위의 기본 제공 구조, 스레드 및 잠금 없음 또는 기타 메커니즘이 없습니다.

    플래시에서 멀티 스레드를 시뮬레이트하는 방법이 있으며 this tutorial은 몇 가지 기본 개념을 설명하기 때문에 솔루션 검색을 시작하는 흥미로운 방법 일 수 있습니다.

    +1

    실제로 현재 –

    +1

    예. 노동자들. 계속해서 최신 답변을 작성하십시오! – weltraumpirat

    0

    당신의 AS3 코드에서 실행할 수있는 하나의 스레드 만이있다.

    경쟁 조건은 비동기 이벤트 핸들러에서 가능하지만 동일하지 의미에서 멀티 스레드 응용 프로그램에서와 같이, 그리고 일반적으로 쉽게 추적.

    예를 들어, 애니메이션 재생을 시작하고 동시에 파일을로드 할 수 있습니다. 먼저 완료되는 시스템은 시스템에 따라 다릅니다.

    실제로 경쟁 조건이 아니지만 비슷한 증상이있는 또 다른 예제는 for..in (또는 for..each) 루프를 사용하여 동일한 이벤트에 대한 여러 수신기를 추가하는 경우입니다. 리스너는 추가 된 순서대로 이벤트를 수신하지만 for..in 루프는 무작위이므로 임의의 결과가 표시됩니다.

    관련 문제