读书人

Cocoa多线程编程札记:NSLock与NSThre

发布时间: 2013-02-17 10:44:46 作者: rapoo

Cocoa多线程编程笔记:NSLock与NSThread


//#import <Foundation/Foundation.h>//int main(int argc, const char * argv[])//{////    @autoreleasepool {//        //        // insert code here...//        NSLog(@"Hello, World!");//        //    }//    return 0;//}NSLock *lock;  @interface MyObject : NSObject  +(void)aMethod:(id)param;  @end  @implementation MyObject  +(void)aMethod:(id)param{      int x;      for(x=0;x<50;++x)      {          [lock lock];          NSLog(@"Object Thread says x is %i\n",x);          usleep(10);  //语句A        [lock unlock];      }      NSLog(@"==Object thread return==");    return;   }  @end  int main(int argc, char *argv[])  {       int x;      lock = [[NSLock alloc] init];      [NSThread detachNewThreadSelector:@selector(aMethod:) toTarget:[MyObject class] withObject:nil];          for(x=0;x<50;++x)      {          [lock lock];          NSLog(@"Main thread says x is %i\n",x);          usleep(10);  //语句B        [lock unlock];          usleep(10);  //语句C    }      NSLog(@"==Main thread return==");    usleep(300); //语句D    return 0;  }  



(1)通过NSThread建立线程

(2)通过NSLock进行线程同步,lock与unlock之间代码可以保证在多个线程间保证原子操作。

a:去掉主线程与子线程中的NSLock相关语句后,通过打印发现;2个线程之间打印的顺序随机;

b:通过使用NSLock, 无论语句A与语句B的值设置为多大,两个线程会交替执行(我把语句C设置为10,保证子线程有进入机会);说明NSLcok保证了lock代码段的原子操作。

c: 主线程退出后,子线程也会退出。 通过修改语句D的值较大时,子线程有足够时间退出,可以打印“Object thread return”,较小时不一定会打印出来。



读书人网 >编程

热点推荐