當前位置:編程學習大全網 - 編程語言 - IOS面試題(多線程) --- 鎖

IOS面試題(多線程) --- 鎖

OC面試題目合集地址

基本的鎖: 自旋鎖 、 互斥鎖 、 讀寫鎖 ,其他的比如 條件鎖 、 遞歸鎖 、 信號量 都是上層的封裝和實現。

鎖的性能從高到底依次是:

OSSpinLock(自旋鎖) >

dispatch_semaphone(信號量) >

pthread_mutex(互斥鎖)>

NSLock(互斥鎖)>

NSCondition(條件鎖) >

pthread_mutex(recursive 互斥遞歸鎖)>

NSRecursiveLock(遞歸鎖)>

NSConditionLock(條件鎖)>

synchronized(互斥鎖)

會發生 死鎖

使用NSLock對臨界區進行加鎖, 進入方法2, 方法2裏面對同壹把鎖又進行了lock方法, 這種情況會由於重入原因發生 死鎖

用遞歸鎖解決, 利用其重入特性: 壹個線程可以加N次鎖而不會引發死鎖

dispatch_semaphore_t 的關鍵3個方法

所以看出信號量壹般處理 加鎖(互斥) , 異步返回 , 控制線程並發數 這些場景。

重點考察多線程並發安全這壹情況, 下面例子都以總20張票, 賣10張, 模擬壹下:

可看出數據其實是錯亂的

那麽我們肯定是要加互斥鎖, 來保證線程安全, 如下

可看出數據正常, 方法沒問題是可以的。

這裏再提供另外壹個解法, 信號量 處理。 信號量 優勢看下 問題2 鎖的性能 , 其中有 dispatch_semaphone(信號量) > NSLock(互斥鎖) 。 並且因為這道題數據量比較小, 如果復雜同步操作, 還是用 信號量 好壹些, 那麽我們用 信號量 保證下線程安全

  • 上一篇:工廠技術員的崗位職責
  • 下一篇:邢臺二十六中學在哪裏
  • copyright 2024編程學習大全網