iOS多线程加锁
在iOS中有幾種方法來解決多線程訪問同一個內存地址的互斥同步問題:
方法一,@synchronized(id anObject),(最簡單的方法)
會自動對參數對象加鎖,保證臨界區內的代碼線程安全
方法二,NSLock
NSLock對象實現了NSLocking protocol,包含幾個方法:
lock,加鎖
unlock,解鎖
tryLock,嘗試加鎖,如果失敗了,并不會阻塞線程,只是立即返回NO
lockBeforeDate:,在指定的date之前暫時阻塞線程(如果沒有獲取鎖的話),如果到期還沒有獲取鎖,則線程被喚醒,函數立即返回NO
比如:
方法三,NSRecursiveLock,遞歸鎖
NSRecursiveLock,多次調用不會阻塞已獲取該鎖的線程。
方法四,NSConditionLock,條件鎖
NSConditionLock,條件鎖,可以設置條件
方法五,NSDistributedLock,分布鎖
NSDistributedLock,分布鎖,文件方式實現,可以跨進程
用tryLock方法獲取鎖。
用unlock方法釋放鎖。
如果一個獲取鎖的進程在釋放鎖之前掛了,那么鎖就一直得不到釋放了,此時可以通過breakLock強行獲取鎖。
總結
- 上一篇: 使用marquee标签实现文字滚动
- 下一篇: 分布式-分布式理论