@ ซิงโครไนซ์ไม่ได้ใช้ "ล็อค" และ "ปลดล็อค" เพื่อให้เกิดการยกเว้นซึ่งกันและกันหรือไม่? มันล็อค / ปลดล็อกได้อย่างไร
ผลลัพธ์ของโปรแกรมต่อไปนี้เป็น "Hello World" เท่านั้น
@interface MyLock: NSLock<NSLocking>
@end
@implementation MyLock
- (id)init {
return [super init];
}
- (void)lock {
NSLog(@"before lock");
[super lock];
NSLog(@"after lock");
}
- (void)unlock {
NSLog(@"before unlock");
[super unlock];
NSLog(@"after unlock");
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
MyLock *lock = [[MyLock new] autorelease];
@synchronized(lock) {
NSLog(@"Hello World");
}
[pool drain];
}
lock
วัตถุถูกสร้างขึ้นบนทุกสายจึงมีไม่เคยจะเป็นกรณีที่หนึ่ง@synchronized
ล็อคบล็อกออกมาอีก และนี่หมายความว่าไม่มีข้อยกเว้นร่วมกัน) แน่นอนตัวอย่างข้างต้นกำลังดำเนินการในmain
ดังนั้นจึงไม่มีอะไรที่จะแยกออกไป แต่ไม่มีใครควรคัดลอกรหัสนั้นในที่อื่น