<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      iOS:多線程同步加鎖的簡單介紹

      多線程同步加鎖主要方式有3種:NSLock(普通鎖)、NSCondition(狀態鎖)、synchronized同步代碼塊

      還有少用的NSRecursiveLock(遞歸鎖)、NSConditionLock(條件鎖)、NSDistributedLock(分布鎖)。
       
      區別:
      NSLock和NSCondition都實現<NSLocking>協議;而synchronized(鎖){….}采用同步加鎖的方式實現加鎖,只要鎖是唯一的就可以,一般設置鎖為當前對象或者類名。NSLock和NSCondition是顯式加鎖,synchronized同步代碼塊是隱式加鎖。
       
      協議如下:
      @protocol NSLocking
      - (void)lock;      //加鎖
      - (void)unlock;  //解鎖
       @end
       
      詳解介紹NSLock:<NSLocking>-------------普通鎖
      <1>屬性:@property (copy) NSString *name //鎖的名字
      <2>其他方法:
           - (BOOL)tryLock;                                   //嘗試加鎖(有可能已經被其他線程加鎖)

           - (BOOL)lockBeforeDate:(NSDate *)limit;    //定時加鎖

           
      詳解介紹NSCondition:<NSLocking>---------狀態鎖
      <1>屬性:@property (copy) NSString *name //鎖的名字
      <2>其他方法:
             - (void)wait;                                          //睡眠等待解鎖
           - (BOOL)waitUntilDate:(NSDate *)limit;     //定時等待解鎖
           - (void)signal;                                         //加鎖信號
           - (void)broadcast;                                   //解鎖通知
       
      詳解介紹NSRecursiveLock:<NSLocking>------ 遞歸鎖
      <1>屬性:@property (copy) NSString *name //鎖的名字
      <2>其他方法:
           - (BOOL)tryLock;                                   //嘗試加鎖(有可能已經被其他線程加鎖,此時無法在加鎖)

           - (BOOL)lockBeforeDate:(NSDate *)limit;    //定時加鎖

      詳解介紹NSConditionLock:<NSLocking>------條件鎖
      <1>屬性:@property (copy) NSString *name             //鎖的名字
                     @property (readonly) NSInteger condition; //狀態
      <2>其他方法:
           - (BOOL)tryLock;                                        //嘗試加鎖(有可能已經被其他線程加鎖)

           - (BOOL)lockBeforeDate:(NSDate *)limit;         //定時加鎖

           - (instancetype)initWithCondition:(NSInteger)condition  //初始化

           - (void)lockWhenCondition:(NSInteger)condition;          //加鎖

           - (BOOL)tryLockWhenCondition:(NSInteger)condition;   //嘗試解鎖

           - (void)unlockWithCondition:(NSInteger)condition;        //解鎖

           - (BOOL)lockWhenCondition:(NSInteger)condition beforeDate:(NSDate *)limit;   //定時加鎖

       
      具體使用簡單演示:
      1、NSLock的使用:
       
          第一步:創建鎖對象  
                     NSLock *mylock = [[NSLock alloc]init];
      while(true)
      {
          第二步:將共享搶占資源加鎖
                    [mylock lock];
                    {..........對共享搶占資源進行操作的代碼..........
          第三步:操作完數據,馬上釋放鎖,給其他的線程調用操作
                    [mylock unlock];
          ....................
      }
       
       
      2、NSCondition和NSRecursiveLock的使用與NSLock基本一樣,只不過NSRecursiveLock會反復調用罷了,這里介紹NSCondition即可。
       
          第一步:創建鎖對象  
                     NSCondition *mylock = [[NSCondition alloc]init];
      while(true)
      {
          第二步:將共享搶占資源加鎖 
                    [mylock lock];
                    {..........對共享搶占資源進行操作的代碼..........} 
          第三步:操作完數據,馬上釋放鎖,給其他的線程調用操作
                    [mylock unlock];
         ....................
      }
       
       
      3、synchronized同步代碼塊的使用:
                   將共享搶占資源和執行代碼放入其中即可
      while(true)
      {
             @synchronized(self)
             {..........對共享搶占資源進行操作的代碼..........}
             ....................
      }
      說明:
       
       
      4、條件鎖NSConditionLock的使用
          第一步:設置條件(初始化)
                   NSConditionLock *conLock = [[NSConditionLock alloc] initWithCondition:No_Data];
          第二步:對線程一加鎖解鎖(生產者)
                   while(true)
                  {
                       [conLock lockWhenCondition:No_Data]; //加鎖
                       {..........對共享搶占資源進行操作的代碼..........}
                       [conLock unlockWhenCondition:Has_Data]; //解鎖,此時的條件Condition設為了內部的某一個數據,可以自定義設定
                  }
          第三步:對線程二加鎖解鎖(消費者)
                  while(true)
                  {
                       [conLock lockWhenCondition:Has_Data]; //加鎖
                       {..........對共享搶占資源進行操作的代碼..........}
                       [conLock unlockWhenCondition:No_Data]; //解鎖
                  }
       
       
       5、分布鎖NSDistributedLock的使用
      NSDistributedLock,分布鎖,文件方式實現,可以跨進程
      用tryLock方法獲取鎖。
      用unlock方法釋放鎖。
      如果一個獲取鎖的進程在釋放鎖之前掛了,那么鎖就一直得不到釋放了,此時可以通過breakLock強行獲取鎖。
      posted @ 2015-10-06 18:05  XYQ全哥  閱讀(1817)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 免费特黄夫妻生活片| 日韩高清视频 一区二区| 高清破外女出血AV毛片| 欧日韩无套内射变态| 青草草97久热精品视频| 亚洲综合久久精品哦夜夜嗨| 欧美精品亚洲精品日韩专 | 亚洲女人天堂成人av在线 | 国产成人无码A区在线观看视频| 精品国产美女福到在线不卡| 久久久国产一区二区三区四区小说| 精品av综合导航| 亚洲av成人无码天堂| 天堂a无码a无线孕交| a级免费视频| 国产精品国产三级国快看| 国产精品自在自线免费观看| 久久久久成人精品无码中文字幕| 国产精品久久无中文字幕| 五月综合激情婷婷六月| 综合图区亚洲另类偷窥| 久久国内精品一区二区三区| 国产精品午夜福利在线观看| 国产美女69视频免费观看| 九九久久亚洲精品美国国内| 人妻另类 专区 欧美 制服| 女人与牲口性恔配视频免费| 亚洲一区二区三区啪啪| 久久夜夜免费视频| 色成人亚洲| 老司机亚洲精品一区二区| 99riav精品免费视频观看| 人妻少妇偷人精品一区| 亚洲精品天堂在线观看| 亚洲a毛片| 日韩av综合中文字幕| 国产精品美女一区二三区| AV区无码字幕中文色| 亚洲av无码精品蜜桃| 亚洲码欧洲码一二三四五| 真实国产乱啪福利露脸|