2011-05-03 2 views
0

각 개체가 이동하고 작업을 수행하는 자체 스레드가있는 게임을 개발 중입니다.
모든 개체 간의 모든 상호 작용을 조정하는 중심 개체가 있습니다. 나는 무작위로 무작위로 여러 가지 문제를 겪었습니다. 무작위로 무작위로 작업을 수행했습니다.이 작업을 재현 할 수 없습니다. 실행 횟수는 100 회당 1 회 정도입니다. 불가능한 일이 일어나는 경우도 있습니다. 필드는 프로그램의 시작 부분에 쓰여지는 유일한 문장 인 프로그램 중간에 작성됩니다.
각 패스에서 중앙 개체를 잠그면 모든 스레드를 아첨하지 않고이를 해결하기위한 지침은 무엇이 있습니까? 나는 "아코디언"운동을 일으킬 것이기 때문에 그들을 평평하게하고 싶지 않습니다. 아코디언 움직임을 참조하는 것은 객체 1, 2, 3, 4, 5가 오른쪽으로 움직일 필요가 있고 그 때가 발생합니다 (시간이 아래로 진행됨).다중 스레드 문제를 방지하기위한 지침

54321 
5432 1 
543 21 
54 321 
5 4321 
54321 

편집 : 그냥 설명 :
가 나는 각 개체에 대한 스레드를 만드는 생각 프레임 워크를 사용, 나는 그것을 제어 할 수 없습니다. 모든 객체를 업데이트 함수라고 부르며 다중 스레드 코드에서 오류가 발생하면 일부 객체를 병렬 처리합니다. 스레드를 풀링하거나 업데이트 할 각 스레드에 대한 개체 수를 할당 할 수 있지만 과학적 방법으로이를 파악하는 방법을 제시 할 수 없다면 확신 할 수 없습니다.

+0

몇 개의 스레드가 있습니까? –

+0

대략 100, 스트레스 순간에 수천 자랄 수 있습니다. – Dani

+0

정확성을 원하면 잠금 장치가 가장 쉽습니다. 경합에 대해 걱정하기 전에 먼저 시도하십시오. –

답변

4

우선. 몇 백 개의 스레드를 사용하면 프로그램이 보다 느려집니다.. 수천 개의 스레드를 사용하는 것은 끔찍한 일입니다. 실제로 응용 프로그램 디자인을 재고해야합니다. ThreadPool이 더 적합할까요? 여기

모든 스레딩 개념을 설명하는 좋은 기사입니다 : http://msdn.microsoft.com/en-us/magazine/cc163744.aspx

은 내가 자동으로 스레드를 만드는 프레임 워크를 사용하는 코멘트에 말했듯이, 나는 우물

제어 할 수 없습니다. 그런 다음 프레임 워크를 잘못 사용해야합니다. 어떤 게임 프레임 워크 개발자도 디자인마다 수백 개의 스레드를 생성 할 수있는 방법이 없습니다.

2

주로 : 병렬 처리가 어렵 기 때문에 멀티 스레딩을 불필요하게 사용하지 마십시오 (예 : race conditions 참조). 스레딩이 문제를 해결한다고 생각되면 스레드 작업 풀을 사용하여 문제 크기 (객체 수)가 아닌 프로세서/코어 수를 확장하십시오.

특정 경우 : 물리 및 객체 상호 작용을 렌더링에서 분리하십시오. 하나의 스윕 (및 단일 스레드)에서 모든 개체 변경을 수행 한 다음 렌더링을 수행하여 어코 스도 니티 (!)를 피할 수 있다고 생각합니다.

+0

내가 주석에서 자동으로 스레드를 만드는 프레임 워크를 사용한다고 말했기 때문에 나는 그것을 제어 할 수 없습니다. – Dani

+2

그런 다음 스위칭 프레임 워크를 고려하십시오. 개체가 거의없는 일부 컨텍스트에서는 의미가있을지라도 프레임 워크는 각 개체를 스레딩 할 수있는 대안이 없다면 분명히 요구 사항에 부적합합니다. 그러나 ... 문서를 확인하십시오. –