多執行緒非同步安全,安全鎖的問題
本篇文章主要介紹多執行緒在非同步時候的內部程式碼呼叫。以及加鎖時候程式碼的呼叫。比較明顯的使用地點是資料庫操作。資源競爭。
首先我們常用到的鎖有以下幾種:
@synchronizad、atomic、NSLook、NSRecursiveLock(遞迴鎖)
接下來先逐一簡單介紹一下這些個執行緒鎖:
1. @synchronizad
這個是常規的區域性程式碼鎖。使用方式:
```@synchronized(lock){
A程式碼
}```
```@synchronized(lock){
B程式碼
}```
lock 是id型別,只要求唯一性就可以。
加密後相當於佇列效果,執行完A之後才會執行B。即便是兩個非同步執行緒。
2.aotomic
這個屬於屬性鎖,也就是原子操作。一個@property使用了這個關鍵字之後,他的setter方法會自動枷鎖。加鎖方式用的就是@synchronizad。 但是這個屬性不要隨便亂用,第一他的效能消耗太高,是noaotomic的20倍差不多。而且,僅僅對setter方法加鎖是有漏洞的,具體例子就是讀取和set的順序問題。
3.NSLook
有點類似於@synchronized 保證多執行緒程式碼安全
lock = [[NSLock alloc] init];
[lock lock];
//程式碼塊
[lock unlock];
4.NSCondition
條件鎖,只有達到條件之後,才會執行鎖操作
BOOL canLock = [conditionLock tryLockWhenCondition:condition];
5.NSRecursiveLock
遞迴鎖主要防止崩潰,一個程式碼塊裡多次加鎖
比如:自身呼叫自身加鎖。
下面介紹一下多執行緒中加鎖:先貼幾行程式碼:
待更新。。。
相關文章
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 多執行緒-執行緒安全問題的產生原因分析以及同步程式碼塊的方式解決執行緒安全問題執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- 多執行緒鎖的問題執行緒
- 多執行緒的安全性問題(三)執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 多執行緒的安全問題及解決方案執行緒
- ArrayList 的執行緒安全問題執行緒
- PHP的執行緒安全與非執行緒安全版本的區別PHP執行緒
- java 執行緒安全問題,解決執行緒安全問題——同步程式碼塊,同步方法,Lock鎖,Object類中wait方法,notify方法。等待喚醒案例。Java執行緒ObjectAI
- 5分鐘搞懂多執行緒安全問題執行緒
- 多執行緒併發安全問題詳解執行緒
- SimpleDateFormat 執行緒安全問題ORM執行緒
- java執行緒安全問題Java執行緒
- 03 執行緒安全問題執行緒
- java多執行緒–同步鎖Java執行緒
- 多執行緒-同步程式碼快的鎖及同步方法應用和鎖的問題執行緒
- java多執行緒:執行緒同步synchronized(不同步的問題、佇列與鎖),死鎖的產生和解決Java執行緒synchronized佇列
- 多執行緒下的程式同步(執行緒同步問題總結篇)執行緒
- parallelStream中的執行緒安全問題Parallel執行緒
- 所謂的執行緒安全問題執行緒
- 多執行緒安全性和Java中的鎖執行緒Java
- 多執行緒之8鎖問題執行緒
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- 【Java多執行緒】執行緒安全的集合Java執行緒
- Java之執行緒安全問題的3種處理方式(通過執行緒同步)Java執行緒
- 深入JAVA執行緒安全問題Java執行緒
- 畫江湖之 PHP 多執行緒開發 【執行緒安全 互斥鎖】PHP執行緒
- 畫江湖之 PHP 多執行緒開發 [執行緒安全 互斥鎖]PHP執行緒
- 多執行緒-同步程式碼塊解決執行緒安全問題的解釋以及同步的特點及好處和弊端執行緒
- Java 執行緒安全 與 鎖Java執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- iOS多執行緒之執行緒安全iOS執行緒
- 非同步/同步,阻塞/非阻塞,單執行緒/多執行緒概念梳理非同步執行緒
- 多執行緒安全(一)執行緒
- Java中解決多執行緒資料安全問題Java執行緒