0

我有兩個線程:線程1在NSMutableDictionary中設置鍵值對並稍後讀取該值,線程2對另一個鍵值對執行相同的操作。 鍵是不同的,每個線程只讀取它設置的鍵值對。但是,其中一個線程可以在另一個線程寫入時讀取。線程安全:兩個線程訪問不同的NSMutableDictionary條目

所以我的問題是,如果兩個線程同時訪問同一個NSMutableDictionary的不同條目,是否需要保護NSMutableDictionary? (整個NSMutableDictionary是由一個線程「聲明」的還是獨立於各個條目的操作?)

+0

看到的是https ://stackoverflow.com/questions/1986736/nsmutabledictionary-thread-safety – rmaddy

回答

0

您不能在從另一個線程讀取或寫入容器對象的同時更改/變更容器對象。

設置字典中的鍵/值對會突變字典。每個鍵/值對都不是一個獨立的實體。

您必須保護字典,否則您可能會崩潰或發生其他不良行爲。一個簡單的方法來做到這一點從Objective-C的是使用@synchronized指令,並使用字典本身傳遞給該指令對象:

@synchronized(myDict) { 
    valueFromDict = myDict[@"someKey"]; 
} 

而且從另一個線程:

@synchronized(myDict) { 
    myDict[@"someOtherKey"] = someValue; 
}