Tôi đang phát triển một hệ thống cung cấp tương tự trong trò chơi của riêng mình, vì vậy tôi cũng đã suy nghĩ về cách giải quyết vấn đề khóa cung và sự thiên vị. Để minh họa vấn đề, tôi sẽ tạo một ví dụ đơn giản:
Nếu bạn có một danh sách: [nhà sản xuất1, người tiêu dùng1, người tiêu dùng2, người tiêu dùng3] và bạn cập nhật theo thứ tự, bắt đầu từ cung cấp = 0, bạn sẽ nhận được điều này:
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...
Consumer1 nhận được tất cả niềm vui, trong khi người tiêu dùng 2 và 3 chết đói cho đến khi người tiêu dùng 1 hài lòng. Tùy thuộc vào trò chơi của bạn, điều này có thể không được mong muốn. Tôi biết trong trò chơi của mình, không phải vậy. Khi tôi tiếp cận nó, tôi sẽ tạo ra một hàng đợi nơi người tiêu dùng được cho ăn trong một tích tắc sẽ di chuyển đến phía sau hàng đợi cho lần đánh dấu tiếp theo, mà tôi tin là những gì Roy T. đang nhận được. Ví dụ trên sẽ như thế này:
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...
Bằng cách này, mọi người sẽ nhận được phần tài nguyên của họ.
Tôi cũng có kế hoạch triển khai một hàng đợi bổ sung được sử dụng làm hàng đợi ưu tiên để người dùng có thể chọn một số cấu trúc nhất định để có mức độ ưu tiên tài nguyên. Hàng đợi ưu tiên sẽ luôn được phục vụ trước hàng đợi tiêu chuẩn. Đảm bảo rằng tất cả các nhà sản xuất được cập nhật trước, sau đó tiêu thụ tất cả tài nguyên thứ hai, nếu không hàng đợi sẽ bị hỏng khi bạn sản xuất tài nguyên một phần thông qua một tích tắc và một số người tiêu dùng đã bị bỏ đói.
Vì vậy, để tóm tắt: Cập nhật các nhà sản xuất, sau đó xếp hàng ưu tiên, di chuyển người tiêu dùng được cung cấp đến cuối hàng ưu tiên, sau đó cập nhật hàng đợi tiêu chuẩn, di chuyển người tiêu dùng được cung cấp đến cuối hàng đợi tiêu chuẩn.