OSMemoryBarrier внутри @synchronized Block, заменить на atomic_thread_fence - PullRequest
0 голосов
/ 10 января 2019

Я обновляю проект и получил следующее предупреждение от Xcode

«OSMemoryBarrier» устарела: сначала устарела в iOS 10.0 - вместо этого используйте atomic_thread_fence () вместо

Из этого метода

- (nonnull id)objectForKey:(nonnull id)source {
id key = self.keyGenerator ? self.keyGenerator(source) : source;
id value = self.values[key];
if (!value) {
    @synchronized(self) {
        value = self.values[key];
        if (!value) {
            value = self.valueGenerator(source);
            OSMemoryBarrier();
            self.values[key] = value;
        }
    }
}
OSMemoryBarrier();
return value;
}

Я все еще пытаюсь понять, как работают барьеры и заборы памяти, и часть приведенного выше кода, которая меня смущает, - это размещение вызовов OSMemoryBarrier(), и почему он должен вызываться внутри блока @synchronized .

Я не уверен, что лучший способ заменить его, похоже, atomic_thread_fence() принимает параметр, и я не уверен, какой параметр он должен использовать в любом месте.

...