内置锁是通过锁上对象的锁标记位进行锁定的。
@interface AppDelegate ()
@property (nonatomic, strong) NSString* o;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
_o = @"";
NSOperationQueue* queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:4];
NSInvocationOperation* op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run1) object:nil];
NSInvocationOperation* op2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run2) object:nil];
[queue addOperation:op1];
[NSThread sleepForTimeInterval:1.0];
[queue addOperation:op2];
}
- (void)run1 {
@synchronized(_o) {
_o = @"Run1";
while (YES) {
}
}
}
- (void)run2 {
@synchronized(_o) {
NSLog(@"run2");
}
}
运行结果会输出 run2。