遞歸鎖
原理:遞歸鎖也是通過 pthread_mutex_lock 函數來實現,在函數內部會判斷鎖的類型。NSRecursiveLock 與 NSLock 的區別在於內部封裝的 pthread_mutex_t 對象的類型不同,前者的類型為 PTHREAD_MUTEX_RECURSIVE
運用場景:循環(多張圖片循環上傳),遞歸
//遞歸鎖實例化
NSRecursiveLock *lock = [[NSRecursiveLock alloc] init];
static void (^RecursiveMethod)(NSInteger);
// 同一線程可多次加鎖,不會造成死鎖
RecursiveMethod = ^(NSInteger value){
[lock lock];//一進來就要開始加鎖
[NetWorkManager requestWithMethod:POST Url:url Parameters:paraDic success:^(id responseObject) {
[self reuestForSuccess];
//一旦數據獲取成功就要解鎖 不然會造成死鎖
[lock unlock];
} requestRrror:^(id requestRrror) {
//條件沒有達到,開始循環操作
if(value > 0){
RecursiveMethod(value-1);//必須-1 循環
}
if(value == 0){
//條件 如果 == 0 代表循環的次數條件已經達到 可以做別的操作
}
//失敗后也要解鎖
[lock unlock];
}];
//記得解鎖
[lock unlock];
};
//設置遞歸鎖循環次數 自定義
RecursiveMethod(5);
