原子性和非原子行相對于線程的安全來講
nonatomic:非原子屬性,線程不安全的,效率高
atomic:原子屬性,線程安全的,效率相對低。
原子屬性是一種單(線程)寫多(線程)讀的多線程技術,不過可能會出現(xiàn)臟數(shù)據(jù)
atomic屬性內(nèi)部的鎖稱為 自旋鎖
凡是線程安全的對象,內(nèi)部肯定會加鎖。
自旋鎖和互斥鎖?
相同點:都能保證同一時間只有一個線程訪問共享資源。都能保證線程安全。
不同點:?
互斥鎖:如果共享數(shù)據(jù)已經(jīng)有其他線程加鎖了,線程會進入休眠狀態(tài)等待鎖。一旦被訪問的資源被解鎖,則等待資源的線程會被喚醒。
自旋鎖:如果共享數(shù)據(jù)已經(jīng)有其他線程加鎖了,線程會以死循環(huán)的方式等待鎖,一旦被訪問的資源被解鎖,則等待資源的線程會立即執(zhí)行。
自旋鎖的效率高于互斥鎖。
atomic屬性內(nèi)部的鎖稱為 互斥鎖 ,并不是自旋鎖。
atomic的實現(xiàn):
- (void)setCurrentImage:(UIImage *)currentImage
{
@synchronized(self) {
if (_currentImage != currentImage) {
[_currentImage release];
_currentImage = [currentImage retain];
// do something
}
}
}
- (UIImage *)currentImage
{
@synchronized(self) {
return _currentImage;
}
}
atomic 的setter方法中 多了一個 @synchronized(self) {},這個語句的功能是:等待當前對象操作完畢并合成確定值,所以是互斥鎖
@synchronized(self)的用法:
@synchronized 的作用是創(chuàng)建一個互斥鎖,保證此時沒有其它線程對self對象進行修改。這個是objective-c的一個鎖定令牌,防止self對象在同一時間內(nèi)被其它線程訪問,起到線程的保護作用。
https://www.cnblogs.com/jukaiit/p/5570056.html