标签:
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. 另外,一般来说客户端很少会有这么大量的加锁解锁操作,所以日常来说这些锁的性能都是可以满足使用需求的。
标签:
原文地址:http://www.cnblogs.com/zylin/p/5062858.html