неатомарное свойство в объекте NSOperation (многопоточная среда), когда его использовать? - PullRequest
1 голос
/ 09 мая 2009

Я все еще изучаю работу в многопоточной среде, используя NSOperation, и мне интересно понять, стоит ли использовать свойство nonatomic, даже если вы используете подклассы NSOperation?

Если для вашего defaultQueue установлено значение 1, стоит ли дополнительных накладных расходов неатома? Может ли это понадобиться, если вы выполняете более 1 потока на одну очередь операций?

Спасибо за предоставление решения для лучшего понимания этого свойства в многопоточной среде.

1 Ответ

5 голосов
/ 09 мая 2009

Если у вас есть объект (или свойство этого объекта), для которого вы можете гарантировать, что к нему нет доступа из нескольких потоков одновременно, тогда вы можете избежать потенциальных затрат на атомарный доступ к этому свойству, используя неатомарный. В простейшем случае создания операции и ее постановки в очередь в NSOperationQueue каждый экземпляр NSOperation будет либо настраиваться в вызывающем потоке, либо работать в одном фоновом потоке; поэтому в любой момент времени доступ к нему должен иметь только один поток.

Более общий вопрос о том, когда неатомичное полезно, частично зависит от того, работаете ли вы с включенной сборкой мусора. Согласно примечаниям к выпуску Objective-C:

Доступ к свойствам по умолчанию атомарный. Это тривиально в GC для почти всего, а также тривиально в не-GC для всего, кроме объектов и структур. В частности, атомарный доступ к удерживаемым объектам в условиях без ГХ может быть дорогим. Таким образом, доступен атрибут неатомарного свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...