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);  
    }  
      
      
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容