Есть ли способ пометить метод как атомарный? - PullRequest
2 голосов
/ 28 июля 2011

Я реализую многопоточность в моей программе ObjC через NSBlockOperation.Некоторые вызовы метода, которые вызываются внутри блока, должны быть атомарными.

Подобно тому, как сделать @property неатомным / атомарным.

Есть ли способ пометить метод как атомарный (вместо@synthronized)

Ответы [ 2 ]

3 голосов
/ 28 июля 2011

Нет.Маркировка свойства atomic на самом деле является просто подсказкой @synthesize, что код, который он генерирует для этого свойства, должен использовать что-то вроде @synchronized для обеспечения атомарного доступа к свойству.

Примечаниечто на практике синтезированному геттеру / сеттеру нет необходимости использовать @synchronized.Например, если базовый ivar может быть прочитан / записан атомарно без блокировок (например, обычное int на многих платформах), фактическая блокировка, сгенерированная компилятором, может отсутствовать.Компилятор также может использовать любой другой метод блокировки, отличный от @synchronized.

3 голосов
/ 28 июля 2011

Нет, и в любом случае это ничего не изменит.Когда вы объявляете @property как atomic, он создает атомарные средства доступа, только если вы также @synthesize средства доступа.В противном случае это просто уведомление клиентского кода о том, что он атомарный, и вы отвечаете за написание атомарных методов доступа (используя @synchronized или другие блокировки).

Так что даже если вы могли бы объявить метод как атомарныйвам все равно придется писать атомарный код самостоятельно.

...