zoukankan      html  css  js  c++  java
  • NSLock 加锁

    iOS并发编程--8种加锁方式及比较

    1. @synchronized 关键字加锁
    2. NSLock 对象锁
    3. NSCondition
    4. NSConditionLock 条件锁
    5. NSRecursiveLock 递归锁
    6. pthread_mutex 互斥锁(C语言)
    7. dispatch_semaphore 信号量实现加锁(GCD)
    8. OSSpinLock

    这里分别使用8种方式加锁解锁1千万次,执行方法如下:

    #import 
    #import 
    
    - (void)runLock{
         CFTimeInterval timeBefore;
        CFTimeInterval timeCurrent;
        NSUInteger i;
        NSUInteger count = 1000*10000;//执行一千万次
    
        //@synchronized
        id obj = [[NSObject alloc]init];;
        timeBefore = CFAbsoluteTimeGetCurrent();
        for(i=0; i<count; :="" code="" condition="" conditionlock="" dispatch_semaphore="" dispatch_semaphore_t="" f="" i="0;" lock="" mutex="PTHREAD_MUTEX_INITIALIZER;" nscondition="" nsconditionlock="" nslock="" nsrecursivelock="" osspinlock="" osspinlocklock="" pthread_mutex="" pthread_mutex_t="" recursivelock="" semaphore="dispatch_semaphore_create(1);" spinlock="OS_SPINLOCK_INIT;" synchronized="" timebefore="CFAbsoluteTimeGetCurrent();" timecurrent="CFAbsoluteTimeGetCurrent();" used="">

    由此可以发现:OSSpinLock的性能最好,GCD的dispatch_semaphore紧随其后;
    NSConditionLock和@synchronized性能较差;

    PS:
    1. 需要注意的是这里仅仅是对各种锁直接Lock和Unlock的性能测试,其中部分锁的使用条件上还是有细微的差异的,比如NSLock之类的还有tryLock等方法用于加锁,不同对象锁的功能偏向不一样等等,有兴趣的可以逐个搜索再更深入的研究不同锁之间的区别。
    2. 另外,一般来说客户端很少会有这么大量的加锁解锁操作,所以日常来说这些锁的性能都是可以满足使用需求的。

  • 相关阅读:
    linux删除目录的命令
    Windows XP下git通过代理下载android代码
    白话算法希尔排序
    操作系统——存储技术
    如何理解Linus Torvalds的“什么才是优秀程序员”的话
    程序员自我修养读书随笔——目标文件
    面试求职:大数据处理总结
    持久化与Session定义
    java中byte转换int时为何与0xff进行与运算
    OSI七层相关协议
  • 原文地址:https://www.cnblogs.com/zylin/p/5062858.html
Copyright © 2011-2022 走看看