2017-02-11 18 views
0

Блокирует ли одна функция из потока, блокирует все остальные потоки, пытаясь получить блокировку в разных функциях.@synchronized (self) блок в нескольких местах для нескольких ресурсов в многопоточной среде, объект c

Мы можем использовать gcd для доступа к критическим разделам, упомянутым ниже, просто хотели знать, как работает @synchronized (self). Для примера.

Выполняет ли несколько потоков с ТОЛЬКО вызовами writeString() блокируется, когда выполнение выполняется в @synchronized (self) {} в writeString()?

OR все потоки, вызывающие функции одного и того же класса с @synchronized (self) {} (например .readDataFromFile()) блокируются,

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

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

Добро пожаловать в Stackoverflow! Вам не нужно копировать заголовок в тело вопроса. – kelin

+0

Вам нужно показать свой код. То же 'self' или другое' self'? – bbum

+0

@shweta Бытие того же класса не имеет значения. Это тот же * экземпляр *? – bbum

ответ

1

@synchronized(A) можно рассматривать как замок, где A идентифицирует замок для использования.

Если вы передадите одно и то же значение для A на два вызова @synchronized(), то они будут использовать один и тот же замок и быть эксклюзивным. Если вы передадите два разных значения для двух вызовов, они не будут эксклюзивными.