내 게임에서 비슷한 공급 시스템을 개발 중이므로 공급 잠금 문제와 편애를 해결하는 방법에 대해서도 생각하고 있습니다. 문제를 설명하기 위해 간단한 예를 작성하겠습니다.
[producer1, consumer1, consumer2, consumer3] 목록이 있고 supply = 0에서 시작하여 순서대로 업데이트하면 다음과 같은 결과가 나타납니다.
producer1 produces 5 mass. You now have 5 mass
consumer1 wants 3 mass. Success, you now have 2 mass
consumer2 wants 3 mass. Fail
consumer3 wants 3 mass. Fail
[next tick]
producer1 produces 5 mass. You now have 7 mass
consumer1 wants 3 mass. Success, you now have 4 mass
consumer2 wants 3 mass. Success, you now have 1 mass
consumer3 wants 3 mass. Fail
etc...
소비자 1은 모든 재미를 얻는 반면 소비자 2와 3은 소비자 1이 만족할 때까지 굶주립니다. 게임에 따라 바람직하지 않을 수 있습니다. 나는 내 게임에서 그렇지 않다. 내가 그것에 도달하면, 나는 한 진드기에 공급 된 소비자가 다음 진드기의 대기열 뒤로 이동하는 대기열을 만들 것입니다. 이것이 Roy T.가 얻는 것입니다. 위의 예는 다음과 같습니다.
producer1 produces 5 mass. You now have 5 mass
consumer1 wants 3 mass. Success, you now have 2 mass. <-- Move to end of queue
consumer2 wants 3 mass. Fail
consumer3 wants 3 mass. Fail
[next tick]
producer1 produces 5 mass. You now have 7 mass
consumer2 wants 3 mass. Success, you now have 4 mass <-- Note the order change
consumer3 wants 3 mass. Success, you now have 1 mass
consumer1 wants 3 mass. Fail
etc...
이런 식으로 모든 사람이 자원을 공정하게 분배합니다.
또한 우선 순위 대기열로 사용할 추가 대기열을 구현하여 사용자가 리소스 우선 순위를 갖는 특정 구조를 선택할 수 있도록 계획하고 있습니다. 우선 순위 대기열은 항상 표준 대기열보다 먼저 제공됩니다. 모든 생산자를 먼저 업데이트 한 다음 모든 자원을 두 번째로 소비해야합니다. 그렇지 않으면 틱을 통해 자원을 생산하고 일부 소비자가 이미 기아 상태가되면 대기열이 중단됩니다.
요약 : 생산자를 업데이트 한 다음 우선 순위 대기열을 업데이트하고 피드 소비자를 우선 순위 큐의 끝으로 이동 한 다음 표준 큐를 업데이트하여 피드 소비자를 표준 큐의 끝으로 이동하십시오.