1. 程式人生 > >多線程使用棧對象的一些問題

多線程使用棧對象的一些問題

銷毀 使用 logs amp texture image 傳遞 保存 ima

遊戲引擎中有這麽一個功能,使用獲取的圖像數據生成一個OpenGL紋理,圖像是一個Image對象,紋理是一個Texture對象,最早的偽代碼如下:

1 Texture* CreateTexture(const char* str)
2 {
3   Image img;
4   img.initWithString(str);
5   Texture* text = new Texture;
6   text->initWithImage(&img);
7   return text;  
8 }

後來為了改進效率,把所有關於OpenGL接口的調用都放在了一個gl線程中,這時候Texture的initWithImage函數就有很多代碼放到gl線程中了。

而在gl線程中真正使用img數據的時候,這個對象可能已經銷毀了。當然也可以在initWithImage先把數據復制一份,然後保存起來到gl線程中使用。不過這種做法對效率有顯著的影響。

所以在涉及到多線程的時候,少用棧對象,尤其是棧對象是引用傳遞的時候。

多線程使用棧對象的一些問題