Есть одна вещь, в которой я не уверен, когда дело доходит до замков. Я прочитал http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Multithreading/ThreadSafety/ThreadSafety.html#//apple_ref/doc/uid/10000057i-CH8-SW16, но в одном я не уверен; @synchronize (или просто мьютекс в целом) защищает только часть кода (скажем, внутри метода) или блокирует весь объект в целом?
Например, над этими методами работают два потока, которые модифицируют массив;
@synthesize m_myMutableArray;
-(void)threadA
{
@synchronized(m_myMutableArray) {
[m_myMutableArray removeAllObjects];
}
}
-(void)threadB
{
NSInteger asdf = 1;
@synchronized(m_myMutableArray) {
[m_myMutableArray addObject:asdf];
}
Разве @synchronized ничего не делает, потому что они являются двумя отдельными блоками кода, или это один и тот же мьютекс, блокируемый в обоих методах, то есть m_myMutableArray является потокобезопасным?
Спасибо