क्या पारस्परिक बहिष्कार को प्राप्त करने के लिए @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
, इसलिए वैसे भी बाहर करने के लिए कुछ भी नहीं है, लेकिन किसी को उस कोड को नेत्रहीन रूप से कॉपी नहीं करना चाहिए।