iOS加锁

2016-03-21  本文已影响74人  喜欢就可以
#import <objc/runtime.h>  
#import <objc/message.h>  
#import <libkern/OSAtomic.h>  
#import <pthread.h>  
   
#define ITERATIONS (1024*1024*32)  
- (void)testLock  
{  
    double then, now;  
    unsigned int i, count;  
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;  
    OSSpinLock spinlock = OS_SPINLOCK_INIT;  
      
    @autoreleasepool {  
        NSLock *lock = [NSLock new];  
        then = CFAbsoluteTimeGetCurrent();  
        for(i=0;i<ITERATIONS;++i)  
        {  
            [lock lock];  
            [lock unlock];  
        }  
        now = CFAbsoluteTimeGetCurrent();  
        printf("NSLock: %f sec\n", now-then);  
          
   
        then = CFAbsoluteTimeGetCurrent();  
        for(i=0;i<ITERATIONS;++i)  
        {  
            pthread_mutex_lock(&mutex);  
            pthread_mutex_unlock(&mutex);  
        }  
        now = CFAbsoluteTimeGetCurrent();  
        printf("pthread_mutex: %f sec\n", now-then);  
          
          
        then = CFAbsoluteTimeGetCurrent();  
        for(i=0;i<ITERATIONS;++i)  
        {  
            OSSpinLockLock(&spinlock);  
            OSSpinLockUnlock(&spinlock);  
        }  
        now = CFAbsoluteTimeGetCurrent();  
        printf("OSSpinlock: %f sec\n", now-then);  
          
        id obj = [NSObject new];  
          
        then = CFAbsoluteTimeGetCurrent();  
        for(i=0;i<ITERATIONS;++i)  
        {  
            @synchronized(obj)  
            {  
            }  
        }  
        now = CFAbsoluteTimeGetCurrent();  
        printf("@synchronized: %f sec\n", now-then);  
    }  
      
      
}  
上一篇 下一篇

猜你喜欢

热点阅读