我最近开始了一个制作游戏的项目(我有点新),我开始思考如何实现多线程来提高性能。
假设你在游戏中有一个单位,它有一个位置x
和y
。这个位置是从互联网上更新的,另一个线程正在使用另一个线程x,y
来渲染单元的图形(它必须知道它在哪里)。
现在假设您在这些变量上放置了一个互斥锁或 sephamore(有点不确定哪个最好用)。问题当然出在渲染线程上。你不能停下来等待,游戏会变得滞后。不过,这对于互联网线程来说不是问题。除非出现问题,否则再多几毫秒就可以更新游戏了。
所以我在想如何解决这个问题,我有了一个想法。假设您创建了 2 套x,y
(从现在开始,我们只使用x
它来使其更简单,但您明白了)。所以你有x1
和x2
。
- 现在互联网线程只更新了 x1。
- 图形线程使用 x1,然后将 x2 更新为其当前值。
现在这里的想法。如果x1
被互联网线程锁定,图形线程只会说
“嘿,我等不及了。我会继续使用
x2
,因为那是一个很好的近似位置。”
它会一直这样做,直到x1
再次免费。它看起来像这样。
//Thread Graphics:
if (x1 is not locked){
lock x1:
use x1
unlock x1:
x2=x1
}else{
use x2
}
//Thread Internet:
wait until x1 is unlocked:
lock x1:
save data to x1
unlock x1:
现在我意识到这会占用一些额外的内存,但我认为这是值得的,至少如果你将这种技术的使用限制在关键数据片段上。
所以我的问题是:你们如何看待这个想法?也许它已经是一种常见的技术,只是我不知道它的名字。如果您对如何解决此类问题有任何其他反馈,我将不胜感激。我认为这是大多数程序员的常见问题。