1. 程式人生 > >多線程與對象的生命周期管理

多線程與對象的生命周期管理

能夠 圖像 生命 new 嘗試 釋放 let delete 方案

很多時候我們需要在線程A裏面生成一個對象,然後在線程B裏面使用這個對象。比如線程A生成一個圖像對象,線程B使用這個對象生成一個紋理。簡單的做法是線程A先new一個圖像對象,然後丟給線程B,線程B使用完這個對象後就delete掉它。

但是如果這個對象還有其它用處呢,比如我要使用這個圖像數據合成另外一些數據生成一個新的紋理,我就不需要再重新創建這個對象。另外,new和delete這種這種很不面向,很不友好。

本文嘗試給出一種新的方案,基本的原則是誰生成,誰管理,誰釋放。

線程A生成對象後傳給線程B使用並引用計數加1,這時候如果線程C也需要這個對象,繼續傳給C再引用計數加1。當線程B使用完這個對象的時候,通過消息隊列告訴線程A已經用完了,線程A獲取這個消息後就對這個對象引用減1。這個消息也可以是一個任務,比如這個任務就是簡單的把這個對象引用計數減1。所有的加1減1都是在線程A裏面執行的,減少了線程互斥的開銷,並能夠準確定位對象的生命管理。

多線程與對象的生命周期管理