2017-02-11 1 views
0

스레드에서 하나의 함수로 잠금을 설정하면 다른 함수에서 잠금을 획득하려고 시도하는 다른 스레드를 모두 차단합니다.다중 스레드 환경에서 여러 리소스의 여러 위치에서 @synchronized (self) 블록, 목표 C

아래에 언급 된 중요 섹션에 액세스하기 위해 gcd를 사용할 수 있습니다. @c 동기화 된 (자체) 작동 방법을 알고 싶을뿐입니다. 예 :

writeString() 호출만으로 여러 스레드가 실행되면 writeString()에서 @synchronized (self) {} 될 때 차단됩니까?

또는 writeString()에서 @synchronized (self) {}에 @synchronized (self) {} (예 :readDataFromFile())와 동일한 클래스의 함수를 호출하는 모든 스레드가 차단됩니다.

-(void)writeString:(NSString*)string forObj:(id)obj 
{ 
    @synchronized(self) 
    { 
     [obj write:string]; 
    } 
} 

-(void)readDataFromFile:(NSString*)file 
{ 
    @synchronized(self) 
    { 
     [self read]; 
    } 
} 
+0

Welcome to Stackoverflow! 질문 본문에 제목을 복사 할 필요는 없습니다. – kelin

+0

코드를 보여줘야합니다. 같은 '자기'또는 다른 '자기'? – bbum

+0

@shweta 같은 클래스에 속하는 것은 부적합합니다. 같은 * 인스턴스 *입니까? – bbum

답변

1

@synchronized(A)A가 사용하는 잠금 장치를 식별하는 잠금 장치로 생각 될 수있다.

A에 대해 동일한 값을 @synchronized()에 두 번 호출하면 동일한 잠금이 사용되며 독점적입니다. 두 번의 호출에 대해 두 개의 다른 값을 전달하면이 값은 독점적이지 않습니다.

관련 문제