有一件事我不確定何時涉及到鎖。我讀過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是線程安全的?
感謝
相關:[是@synchronized塊保證釋放他們的鎖嗎?](http://stackoverflow.com/q/7735799/557219)凱文的答案也應該回答你的問題:只要是同一個互斥體被「m_myMutableArray」指向的對象是相同的。 – 2011-11-11 08:37:57
可能的重複[如何在Objective-C中執行@synchronized lock/unlock?](http://stackoverflow.com/questions/1215330/how-does-synchronized-lock-unlock-in-objective-c) – 2011-11-11 08:42:38
每次我要訪問m_myMutablearray時,還必須使用@synchronized指令?例如,如果threadB沒有使用synchronized指令,如果之前threadA鎖定它,它仍會阻塞嗎? – KaiserJohaan