ロックについては、わからないことが1つあります。私はhttp://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW16を読んだことがあるが、確かに分かりません。 @synchronize(または単に一般的なmutex)は、コードの一部だけを保護する(メソッド内部で)か、オブジェクト全体全体をロックしますか?ロックについての混乱
たとえば、これらのメソッドで動作する2つのスレッドは、配列を変更します。
@synthesize m_myMutableArray;
-(void)threadA
{
@synchronized(m_myMutableArray) {
[m_myMutableArray removeAllObjects];
}
}
-(void)threadB
{
NSInteger asdf = 1;
@synchronized(m_myMutableArray) {
[m_myMutableArray addObject:asdf];
}
は、彼らは2つのコードの別々のブロックであるため、何もしていません@synchronized、またはそれは両方の方法でロックされている同じミューテックスで、m_myMutableArrayはスレッドセーフであることを意味しますか?
おかげ@synchronized
へ
関連:[同期されたブロックはロックを解除することが保証されていますか?](http://stackoverflow.com/q/7735799/557219)ケビンの答えはあなたの質問にも答えなければなりません。 'm_myMutableArray'が指すオブジェクトは同じです。 –
[Objective-Cで@synchronizedロック/アンロックはどうすればよいですか?](http://stackoverflow.com/questions/1215330/how-does-synchronized-lock-unlock-in-objective-c) –
私は私はm_myMutablearrayにアクセスしようとするたびに@synchronizedディレクティブを使用する必要がありますか?たとえば、threadBがsynchronizedディレクティブを使用していない場合、threadAがそれをロックしていたとしてもブロックされますか? – KaiserJohaan