欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解iOS 多線程 鎖 互斥 同步

 更新時(shí)間:2016年12月16日 10:07:02   作者:more2010wei  
在iOS中有幾種方法來解決多線程訪問同一個(gè)內(nèi)存地址的互斥同步問題,本篇文章主要介紹了5中方法來解決問題,有興趣的可以了解一下。

在iOS中有幾種方法來解決多線程訪問同一個(gè)內(nèi)存地址的互斥同步問題:

方法一,@synchronized(id anObject),(最簡單的方法)

會自動對參數(shù)對象加鎖,保證臨界區(qū)內(nèi)的代碼線程安全

@synchronized(self) 
 
{ 
 
    // 這段代碼對其他 @synchronized(self) 都是互斥的     
 
    // self 指向同一個(gè)對象 
 
}  

方法二,NSLock
NSLock對象實(shí)現(xiàn)了NSLocking protocol,包含幾個(gè)方法:

  • lock,加鎖
  • unlock,解鎖
  • tryLock,嘗試加鎖,如果失敗了,并不會阻塞線程,只是立即返回NO
  • lockBeforeDate:,在指定的date之前暫時(shí)阻塞線程(如果沒有獲取鎖的話),如果到期還沒有獲取鎖,則線程被喚醒,函數(shù)立即返回NO

比如:

NSLock *theLock = [[NSLock alloc] init];  
if ([theLock lock])  
{ 
  //do something here 
  [theLock unlock];  
}  

方法三,NSRecursiveLock,遞歸鎖

NSRecursiveLock,多次調(diào)用不會阻塞已獲取該鎖的線程。

 NSRecursiveLock *theLock = [[NSRecursiveLock alloc] init];  
 void MyRecursiveFunction(int value)  
{  
 [theLock lock];  
 if (value != 0)  
<span style="font-size:14px;"> </span>{  
  –value;  
  MyRecursiveFunction(value);  
 } 
 [theLock unlock];  
}  
 
 MyRecursiveFunction(5); 

方法四,NSConditionLock,條件鎖

NSConditionLock,條件鎖,可以設(shè)置條件

//公共部分 
id condLock = [[NSConditionLock alloc] initWithCondition:NO_DATA];  
    
 //線程一,生產(chǎn)者 
 while(true) {  
    [condLock lockWhenCondition:NO_DATA];  
    //生產(chǎn)數(shù)據(jù) 
    [condLock unlockWithCondition:HAS_DATA];  
} 
    
 //線程二,消費(fèi)者 
 while (true) {  
    [condLock lockWhenCondition:HAS_DATA];  
    //消費(fèi) 
    [condLock unlockWithCondition:NO_DATA];  
} 

方法五,NSDistributedLock,分布鎖

NSDistributedLock,分布鎖,文件方式實(shí)現(xiàn),可以跨進(jìn)程

  • 用tryLock方法獲取鎖。
  • 用unlock方法釋放鎖。

如果一個(gè)獲取鎖的進(jìn)程在釋放鎖之前掛了,那么鎖就一直得不到釋放了,此時(shí)可以通過breakLock強(qiáng)行獲取鎖。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • iOS 模塊化之JLRoute路由示例

    iOS 模塊化之JLRoute路由示例

    這篇文章主要介紹了iOS 模塊化之JLRoute路由示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • XCode編譯速度慢的處理方法

    XCode編譯速度慢的處理方法

    本文給大家介紹的是在IOS開發(fā)中XCode編譯速度慢的3種解決辦法,十分的實(shí)用,有需要的小伙伴可以參考下。
    2015-06-06
  • IOS?簡單的本地json格式文件解析的實(shí)例詳解

    IOS?簡單的本地json格式文件解析的實(shí)例詳解

    這篇文章主要介紹了IOS?簡單的本地json格式文件解析的實(shí)例詳解的相關(guān)資料,希望通過本文大家能夠掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • iOS中TableView如何統(tǒng)一數(shù)據(jù)源代理詳解

    iOS中TableView如何統(tǒng)一數(shù)據(jù)源代理詳解

    這篇文章主要給大家介紹了關(guān)于iOS中TableView如何統(tǒng)一數(shù)據(jù)源代理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • iOS實(shí)現(xiàn)圖片壓縮的兩種方法及圖片壓縮上傳功能

    iOS實(shí)現(xiàn)圖片壓縮的兩種方法及圖片壓縮上傳功能

    ios 圖片壓縮有兩種方法,分別是,壓縮圖片質(zhì)量(Quality),壓縮圖片尺寸(Size),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2017-01-01
  • iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開APP的例子

    iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開APP的例子

    這篇文章主要介紹了iOS中使用schema協(xié)議調(diào)用APP和使用iframe打開APP的例子,用在瀏覽器中打開APP,需要的朋友可以參考下
    2014-08-08
  • iOS離屏渲染過程示例解析

    iOS離屏渲染過程示例解析

    這篇文章主要為大家介紹了iOS離屏渲染過程示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • iOS中wkwebView內(nèi)存泄漏與循環(huán)引用問題詳解

    iOS中wkwebView內(nèi)存泄漏與循環(huán)引用問題詳解

    這篇文章主要給大家介紹了關(guān)于iOS中wkwebView內(nèi)存泄漏與循環(huán)引用問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • iOS11 WKWebView內(nèi)容過濾規(guī)則詳解

    iOS11 WKWebView內(nèi)容過濾規(guī)則詳解

    本篇文章主要介紹了iOS11 WKWebView內(nèi)容過濾規(guī)則詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • iOS實(shí)現(xiàn)啟動引導(dǎo)頁與指紋解鎖的方法詳解

    iOS實(shí)現(xiàn)啟動引導(dǎo)頁與指紋解鎖的方法詳解

    這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)啟動引導(dǎo)頁與指紋解鎖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02

最新評論