क्या पारस्परिक बहिष्कार को प्राप्त करने के लिए @synchronized ने "लॉक" और "अनलॉक" का उपयोग नहीं किया है? फिर यह लॉक / अनलॉक कैसे करता है?
निम्नलिखित कार्यक्रम का आउटपुट केवल "हैलो वर्ल्ड" है।
@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, इसलिए वैसे भी बाहर करने के लिए कुछ भी नहीं है, लेकिन किसी को उस कोड को नेत्रहीन रूप से कॉपी नहीं करना चाहिए।