小碼哥iOS學習筆記第二十三天: atomic

  • atomic用於保證屬性settergetter的原子性操做,至關於在gettersetter內部加了線程同步的鎖
  • 能夠參考源碼objc4objc-accessors.mm
  • 它並不能保證使用屬性的過程是線程安全的

1、原子鎖是什麼意思

  • 如今有下面三句代碼
int a = 10;             // 1
int b = 20;             // 2
int c = a + b;          // 3
複製代碼
  • 這三句代碼, 若是被多線程訪問, 那麼就有可能有三條線程分別同時訪問這三句代碼
  • 原子鎖的意思就是, 將這三句代碼在同一時間只能有一條線程能夠訪問
// 加鎖
int a = 10;             // 1
int b = 20;             // 2
int c = a + b;          // 3
// 解鎖
複製代碼

2、查看atomic修飾的屬性底層代碼

  • 下面的代碼就是給屬性賦值的底層實現, 全都調用了reallySetProperty函數

  • 進入reallySetProperty函數, 能夠看到賦值的先後, 若是是atomic修飾, 那麼就會加上原子鎖

  • 查看getter的底層實現, 能夠看到取值的先後, 若是是atomic修飾, 那麼就會加上原子鎖

  • 原子鎖只能保證settergetter內部的區域是安全的, 可是外部使用的時候就沒辦法保證

3、查看原子鎖的底層結構

相關文章
相關標籤/搜索