@synchronized는 상호 배제를 달성하기 위해 "잠금"및 "잠금 해제"를 사용하지 않습니까? 그러면 어떻게 잠금 / 잠금 해제합니까?
다음 프로그램의 출력은 "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
하므로 어쨌든 배제 할 것이 없지만 다른 곳에서는 해당 코드를 맹목적으로 복사해서는 안됩니다.