iOS加锁

#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);  
    }  
      
      
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容