IOS學習之自旋鎖(原子atomic) 和互斥鎖

互斥鎖與自旋鎖

互斥鎖

  • 若是發現其餘線程正在執行鎖定的代碼,線程會進入休眠(就緒狀態),等其餘線程時間片打開鎖後,線程會被喚醒執行。

自旋鎖

  • 若是發現有其餘線程正在執行鎖定的代碼,線程會進入死循環的方式,一直等待鎖定的代碼執行完成 自旋鎖更適合執行不耗時的代碼
只有寫(setter方法)是加了鎖的,讀(get方法)沒有加鎖。
因此若是代碼塊中有讀和寫的兩個操做不能保證數據的正確性

@property(atomic,assign) int ticketsCount;安全

//模擬賣票的方法 -(void) sellTickets{ while (YES) { [NSThread sleepForTimeInterval:1.0]; //判斷是否還有票atom

//任意一個對象都有一把鎖


   //雖然ticketsCount是原子性的 可是因爲代碼裏面同時有getter方法和setter方法因此沒法保證數據正確。下面的代碼不是線程安全的
        if(self.ticketsCount>0){
            self.ticketsCount=self.ticketsCount-1;
            NSLog(@"剩餘%d張票",self.ticketsCount);
            
        }else{
            NSLog(@"來晚了,票沒了");
            break;
        }


}

}線程

相關文章
相關標籤/搜索