Nói về ngữ cảnh của một trò chơi dựa trên trình kết xuất openGL:
Giả sử có hai luồng:
Cập nhật logic trò chơi và vật lý, vv cho các đối tượng trong trò chơi
Thực hiện các lệnh gọi openGL cho từng đối tượng trò chơi dựa trên dữ liệu trong các đối tượng trò chơi (luồng 1 đó tiếp tục cập nhật)
Trừ khi bạn có hai bản sao của mỗi đối tượng trò chơi ở trạng thái hiện tại của trò chơi, bạn sẽ phải tạm dừng Chủ đề 1 trong khi Chủ đề 2 thực hiện các cuộc gọi rút thăm nếu không các đối tượng trò chơi sẽ được cập nhật ở giữa lệnh gọi cho đối tượng đó. là không mong muốn!
Nhưng việc dừng chủ đề 1 để thực hiện các cuộc gọi rút thăm từ chủ đề 2 sẽ giết chết toàn bộ mục đích của đa luồng / đồng thời
Có cách tiếp cận nào tốt hơn cho việc này ngoài việc sử dụng hàng trăm hoặc hàng nghìn hoặc đồng bộ hóa các đối tượng / hàng rào để kiến trúc đa lõi có thể được khai thác để thực hiện?
Tôi biết tôi vẫn có thể sử dụng đa luồng để tải kết cấu và biên dịch shader cho các đối tượng chưa phải là một phần của trạng thái trò chơi hiện tại nhưng làm cách nào để làm cho các đối tượng hoạt động / hiển thị mà không gây xung đột với vẽ và cập nhật?
Điều gì xảy ra nếu tôi sử dụng khóa đồng bộ hóa riêng biệt trong từng đối tượng trò chơi? Bằng cách này, bất kỳ luồng nào sẽ chỉ chặn trên một đối tượng (trường hợp lý tưởng) chứ không phải cho toàn bộ chu trình cập nhật / vẽ! Nhưng làm thế nào tốn kém là mất khóa trên mỗi đối tượng (trò chơi có thể có một ngàn đối tượng)?