多線程安全瑣碎

閱讀原文地址http://www.cnblogs.com/wendingding/p/3805841.html

今天遇到這個問題,看了一下這篇文章,然後按照自己的理解記錄一下,不是很準確,僅供參考.

多線程存在安全隱患,當多線程訪問同一塊資源時,很容易引發數據錯亂和數據安全問題.會對數據進行多次重複處理,線程之間單獨完成處理後返回結果,未進行線程間協同處理數據,造成單條數據被多次處理,造成數據混亂.

通過@synchronized(鎖對象){//需要鎖定的代碼}互斥鎖解決問題,  注意:鎖一份代碼只用一把鎖,用多把鎖是無效的.

互斥鎖的優缺點

優點: 能有效防止因多線程搶奪資源造成的數據安全問題

缺點: 需要消耗大量的CPU資源


互斥鎖的使用前提: 多條線程搶奪同一塊資源

相關專業術語: 線程同步,多條線程按順序地執行任務

互斥鎖, 就是使用了線程同步技術

原子性和非原子性

OC在定義屬性時有nonatomic和atomic兩種

atomic: 原子性,爲setter方法加鎖(默認就是atomic)

nonatomic: 非原子性,不會爲setter方法加鎖


atomic加鎖原理

@property (assign, atomic) int age;

- (void)setAge:(int)age{

@synchronized(self){

_age = age;

}

}

原子性和非原子性的選擇

nonatomic和atomic對比

atomic: 線程安全,需要消耗大量的資源

nonatomic: 非線程安全,適合內存小的移動設備


iOS開發的建議

所有屬性都聲明爲nonatomic

儘量避免多線程搶奪同一塊資源

儘量將加鎖資源搶奪的業務邏輯交給服務端處理,減小移動客戶端的壓力


還有一篇文章比較清晰的介紹http://blog.csdn.net/horkychen/article/details/8134917

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章