2017-02-11 2 views
0

スレッドから1つの関数をロックすると、他のすべてのスレッドが異なる関数でロックを取得しようとします。マルチスレッド環境での複数のリソースの複数の場所での同期(self)ブロック、目的c

下記のクリティカルセクションにアクセスするためにgcdを使うことができます。ちょうど@synchronized(self)の仕組みを知りたがっています。 例:

実行がwriteString()の@synchronized(self){}のときに、writeString()呼び出しのみで複数のスレッドがブロックされますか?

OR writeString()で@synchronized(self){}を実行すると、@synchronized(self){}(egreadDataFromFile())と同じクラスの関数を呼び出すすべてのスレッドがブロックされますか?

-(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()を2回コールすると、同じロックが使用され、排他的になります。 2つの呼び出しに2つの異なる値を渡すと、排他的ではありません。

関連する問題