2010-08-18 4 views
1

Ruby에서 API 통합 프로젝트를 진행하고 있는데 레일스가 파인더 메소드에서 수행하는 작업을 다소 따르기 위해 클래스 메소드를 만들려고했으나 그렇게하지 못했습니다. 나는 경쟁 조건을 도입할지 모른다.Ruby 클래스 메소드의 레이스 조건

클래스 변수를 사용하여 개체를 인스턴스화하고 외부 API 호출을 작성하지 않으므로 모든 것이 클래스 메서드 내에서 로컬 범위가됩니다. 여전히 여러 스레드가이 클래스 메서드를 통과 할 때 경쟁 조건이 발생할 가능성이 있습니까? Rails가 클래스 메소드를 사용하여 이것을 피하는 방법은 무엇입니까? 아니면 내가 더 근본적인 수준에서 뭔가를 이해하지 못하겠습니까?

답변

2

스레드가 작동하는 방식이나 경쟁 조건의 근원이 될 수있는 문제의 일부를 설명하지 않을 수도 있습니다.

두 개의 다른 스레드에서 메서드를 호출하는 것만으로는 경쟁 조건이 발생하기에 충분하지 않습니다. 다른 스레드가 사용 중일 때 일관성없는 상태 일 수있는 공유 리소스가 없으면 경쟁 조건이 실제로 문제가되지 않습니다.

모든 변수 범위가 메소드에 적용되는 경우 문제에 대한 설명에서 수집 할 수있는 유일한 출처는 API 호출 일 수 있습니다. 한 스레드가 API에 액세스하는 도중에 다른 스레드가 진행 중이고 어떤 상호 작용이 수행 되더라도 다시 시작될 수 있고 문제가있는 경우 경쟁 문제가 발생할 수 있습니다.

+0

그래, 특히 외부 API 호출에 대해 우려하고 있습니다. 그래서 기본적으로 함수 내에서 어떤 공유 리소스도없는 한 나는 괜찮을 것입니다. 감사! – Ruben

관련 문제