2017-02-11 28 views
0

從一個線程鎖定一個函數,阻止嘗試獲取不同函數的鎖的所有其他線程。@synchronized(self)block在多線程環境中的多個資源的多個位置,目標c

我們可以使用gcd來訪問下面提到的關鍵部分,只是想知道@synchronized(self)是如何工作的。 例如。

執行writeString()中的@synchronized(self){}時,執行多個只有writeString()調用的線程會被阻塞嗎?當在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

歡迎來到Stackoverflow!您不需要在問題主體中複製標題。 – kelin

+0

你需要顯示你的代碼。同樣的「自我」還是不同的「自我」? – bbum

+0

@shweta同一個班級是無關緊要的。它是相同的*實例*? – bbum

回答

1

@synchronized(A)可以被認爲是作爲鎖定其中A標識使用該鎖。

如果您將A的相同值傳遞給@synchronized()的兩個調用,那麼它們將使用相同的鎖並且是獨佔的。如果你爲兩個呼叫傳遞兩個不同的值,那麼它們將不是唯一的。