방금 싱글 톤 메서드를 만들었는데, @synchronized()
자주 사용하지만 의미 를 모르기 때문에 함수 가 무엇을하는지 알고 싶습니다 .
답변
코드 블록 주위에 중요한 섹션을 선언합니다 . 다중 스레드 코드 @synchronized
에서 주어진 시간에 블록에서 해당 코드를 하나의 스레드 만 실행할 수 있도록 보장합니다.
그것이 무엇을하는지 알지 못한다면, 당신의 애플리케이션은 아마도 멀티 스레드가 아닐 것이고 아마도 그것을 사용할 필요가 없을 것입니다 (특히 싱글 톤 자체가 스레드로부터 안전하지 않은 경우).
편집 : 2011의 원래 답변에 없었던 정보를 더 추가합니다.
@synchronized
지시자는 a로 보호 된 코드의 영역에 들어가는 다수의 스레드를 방지 @synchronized
지시자 같은 객체를 참조 . @synchronized
지시문에 전달 된 개체 는 “잠금”으로 사용되는 개체입니다. 다른 개체가 잠금으로 사용되는 경우 두 개의 스레드가 동일한 보호 코드 영역에있을 수 있으며 잠금과 동일한 개체를 사용하여 완전히 다른 두 코드 영역을 보호 할 수도 있습니다.
또한 nil
잠금 개체 로 전달 하면 잠금이 전혀 적용되지 않습니다.
답변
답변
이 @synchronized
지시문은 Objective-C 코드 에서 즉석에서 뮤텍스 잠금을 생성하는 편리한 방법 입니다.
@synchronized
지시어는 할 일이 다른 뮤텍스 잠금이 될지 않습니다 같은 시간에 같은 잠금을 획득에서 다른 스레드를 방지 할 수 있습니다.
통사론:
@synchronized(key)
{
// thread-safe code
}
예:
-(void)AppendExisting:(NSString*)val
{
@synchronized (oldValue) {
[oldValue stringByAppendingFormat:@"-%@",val];
}
}
이제 위의 코드는 완벽하게 스레드로부터 안전합니다. 이제 여러 스레드가 값을 변경할 수 있습니다.
위는 모호한 예일뿐입니다 …
답변
@synchronized 블록은 자동으로 잠금 및 잠금 해제를 처리합니다 . @synchronize 동기화에 사용중인 개체와 관련된 암시 적 잠금이 있습니다. 이 주제에 대한 매우 유익한 토론 은 Objective-C에서 @synchronized 잠금 / 잠금 해제 방법을 따르십시오 .
답변
답변
@synchronized
이다 thread safe
메커니즘. 이 함수 내부에 작성된 코드 조각은 critical section
한 번에 하나의 스레드 만 실행할 수있는 의 일부가 됩니다.
@synchronize
잠금을 암시 적으로 NSLock
적용하는 반면 명시 적으로 적용합니다.
스레드 안전성 만 보장 할뿐 보장하지는 않습니다. 내가 의미하는 것은 당신이 당신의 차를 위해 전문 운전사를 고용한다는 것입니다. 그래도 차가 사고를 만나지 않을 것이라는 보장은 없습니다. 그러나 확률은 미미합니다.