iOS執行緒安全單例詳解

2021-06-22 12:49:41 字數 1085 閱讀 1800

只能生成乙個例項的類是實現了singleton模式的型別。由於設計模式在物件導向程式設計中起著舉足輕重的作用,在常用的模式中,singleton是唯一乙個能夠用短短幾十行**完整實現的模式。

static

pplaccountmanager

*sharedinstance = 

nil;

1.最簡單(非執行緒安全)

+ (pplaccountmanager

*)sharedmanager     

return

sharedinstance; }

單執行緒下執行正常,但是在多執行緒下就有問題了。如果兩個執行緒同時執行到判斷shareinstance是否為nil的if語句,且shareinstance沒有建立時候,那麼2個執行緒都會建立乙個例項,此時單例就不在滿足單例模式的要求了。為了保證多執行緒環境下我們還是只能得到型別的乙個例項,需要加上乙個同步鎖。如下:

2.執行緒安全(不是最優)

+ (pplaccountmanager

*)sharedmanager         

return

sharedinstance;      }

}這裡還不是很完美。我們還是設想兩個執行緒同時想建立乙個例項,由於同一時刻只能有乙個能得到同步鎖,每當第乙個執行緒鎖加上鎖,第二個執行緒只能等待,當第乙個執行緒發現例項還沒有建立時,它建立乙個例項。接著第乙個執行緒釋放同步鎖,此時第二個執行緒可以加上同步鎖,並執行接下來的 **。我們每次得到單例例項,都會試圖加上乙個執行緒鎖,而加鎖是乙個非常耗時的操作,在沒有必要的時候,我們盡量要避免。

3.執行緒安全(邏輯複雜)

+ (pplaccountmanager

*)sharedmanager    

}   

}return

sharedinstance;}

這裡用了2個if判斷來提高效率,但是**實現邏輯比較複雜,容易出錯,我們還有更加優秀的的解法。

4.最優演算法(官方推薦)

+ (pplaccountmanager

*)sharedmanager );    

return

sharedinstance; 

}  }

單例模式的執行緒安全問題詳解

單例模式的作用就是保證類只有乙個例項物件。分為懶漢式和餓漢式,聽名字就能知道個大概了,直接貼 懶漢式 懶漢 模式 public class singleton 單例物件 private static singleton singleton null public singleton getsingl...

從C 單例模式到執行緒安全詳解

先看乙個最簡單的教科書式單例模式 class csingleton return ps 程式設計客棧 private csingleton csingleton operator const csingleton s static csingleton ps csingleton csingleto...

詳解C 實現執行緒安全的單例模式

在某些應用環境下面,乙個類只允許有乙個例項,這就是著名的單例模式。單例模式分為懶漢模式,跟餓漢模式兩種。首先給出餓漢模式的實現 正解 template class singleton private singleton const singleton 禁止拷貝 singleton operator ...