@synchronized(obj) {...}
просто означает, что все, что в {...}
не будет выполняться параллельно с любыми другими @synchronized(obj)
«ы {...}
.
I.e. Дано:
резьбы 1:
@synchronized(objectA) {
[self doSomeStuff];
}
резьбы 2:
@synchronized(objectA) {
[self doSomeStuff];
}
нити 3:
[self doSomeStuff];
Один из потока 1 или потока 2 будет блокировать в то время как другие выполняет doSomeStuff
, но поток 3 будет весело ссылаться на doSomeStuff
одновременно.
И, более прямо на ваш вопрос, это означает, что нет, существует абсолютно нулевая защита от параллелизма для всего, что doSomeStuff
может сделать внутренне.
Если вы хотите, чтобы ваши объекты были «потокобезопасными», они должны быть спроектированы сверху донизу с учетом параллелизма (и это обычно не означает, что во всем мире имеется множество замков или примитивов синхронизации).