原理:递归锁也是通过 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);

iOS 递归锁的更多相关文章

  1. iOS 线程锁同步机制

    转载自 http://yulingtianxia.com/blog/2015/11/01/More-than-you-want-to-know-about-synchronized/ 如果你已经使用 ...

  2. C#、OC递归锁

    做ios也有1年了,C#的东西有些都忘记了,最近几天也打算重温一下,不能学了ios把C#给抛弃了,两者都要抓,一精多专.目前C#只是重温,重点是web这块.今天主要是想起了之前做过的面试题,虽然题比较 ...

  3. ios 各种锁的使用性能比较

    iOS开发中常用的锁有如下几种 来比较一下遇到加锁的情况: 1. @synchronized 关键字加锁 2. NSLock 对象锁 3. NSCondition  4. NSConditionLoc ...

  4. iOS数据锁

    简介 当一个线程访问数据时,而其他数据不能进行访问,保证线程安全或者可以理解为执行多线程,对于共享资源访问时保证互斥的要求 文章 不再安全的 OSSpinLock iOS开发中的11种锁以及性能对比 ...

  5. ReactiveSwift源码解析(十一) Atomic的代码实现以及其中的Defer延迟、Posix互斥锁、递归锁

    本篇博客我们来聊一下ReactiveSwift中的原子性操作,在此内容上我们简单的聊一下Posix互斥锁以及递归锁的概念以及使用场景.然后再聊一下Atomic的代码实现.Atomic主要负责多线程下的 ...

  6. python--同步锁/递归锁/协程

    同步锁/递归锁/协程 1 同步锁 锁通常被用来实现对共享资源的同步访问,为每一个共享资源创建一个Lock对象,当你需需要访问该资源时,调用acquire()方法来获取锁对象(如果其他线程已经获得了该锁 ...

  7. 26 python 初学(线程、同步锁、死锁和递归锁)

    参考博客: www.cnblogs.com/yuanchenqi/articles/5733873.html 并发:一段时间内做一些事情 并行:同时做多件事情 线程是操作系统能够进行运算调度的基本单位 ...

  8. Thread类的其他方法,同步锁,死锁与递归锁,信号量,事件,条件,定时器,队列,Python标准模块--concurrent.futures

    参考博客: https://www.cnblogs.com/xiao987334176/p/9046028.html 线程简述 什么是线程?线程是cpu调度的最小单位进程是资源分配的最小单位 进程和线 ...

  9. Python 递归锁

    import time from threading import Thread, Lock, RLock def f1(locA, locB): # print('xxxx') # time.sle ...

随机推荐

  1. 我也来说说js的事件机制

    原文链接:http://www.w3cfuns.com/notes/17398/8062de2558ef495ce6cb7679f940ae5c.html 学js,不懂事件机制,基本可以说学了js,就 ...

  2. Features (OCMock 2)

    This page describes the features present in OCMock 2.x, using the traditional syntax. All these feat ...

  3. 【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】

    [109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 ...

  4. 倍福TwinCAT(贝福Beckhoff)基础教程 松下官方软件开启报错伺服未就绪怎么办

    一般是伺服到电机的动力线没接好(请查看动力线接线是否正确)   更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123   我的在线 ...

  5. extjs_06_grid(列锁定&列分组)

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  6. lodash 展平数组 flatten flattenDeep

    _.flatten(array) 向上一级展平数组嵌套 <!DOCTYPE html> <html lang="zh"> <head> < ...

  7. 【Excle数据透视表】如何为数据透视表应用样式

    如下数据透视表样例,如何为该数据透视表设置样式呢? 步骤 单击数据透视表区域的任意单元格→数据透视表工具→设计→数据透视表样式→打开下拉箭头即可任意选择

  8. Hbase笔记1-2

    吴超1.1 Hbase是Hadoop中的数据库,Hadoop还需要数据库吗?我们学的Hadoop是一个分布式的存储和计算的平台为什么要在他上面建一个数据库呢,数据库是干什么的呢,数据库是一个管理系统( ...

  9. 使用transform和transition制作CSS3动画

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  10. msyql5.5修改配置文件开启慢查询日志

    修改/etc/my.cnf文件 在[mysqld]下面修改或添加配置(在别处不起作用) slow_query_log = on slow_query_log_file = /usr/local/mys ...