2015-08-31 7 views
0

После прочтения this ответ Я очень смущен.Что такое поток Безопасный атомный или неатомный?

Некоторые говорят, что атомы являются потокобезопасными, а некоторые говорят, что неатомические потоки безопасны.

Каков точный ответ на этот вопрос.

+0

Имейте в виду, что создание атома атома - это не все, что требуется для обеспечения безопасности потоков. Атомная ссылка на NSMutableArray сделает контрольный поток безопасным, но не фактическим массивом. – Paulw11

ответ

0

Как упоминается в нескольких ответах на поставленный вопрос, атомный поток является безопасным потоком. Это означает, что геттер/сеттер, работающий над любым потоком, должен заканчиваться первым, прежде чем какой-либо другой поток сможет выполнить геттер/сеттер.

+0

Ссылка, которую я дал, упоминает, что атомарное чтение/запись безопасно, но не потокобезопасное это неверно – user5214391

+0

@ user5214391 Я думаю, что ответ, который вы имеете в виду, принадлежит пользователю: bbum. Он объясняет ответ в комментарии, говоря, что «безопасность потоков может быть действительно выражена только на уровне модели, а не на индивидуальном аксессуре. Подумайте о firstName/lastName, поток A извлекает firstName, thread B устанавливает lastName, поток A извлекает lasName, thread B устанавливает firstName. А теперь имеет несоответствующий набор имен; атомарность не может защитить от этого без внедрения атомарности транзакций, которая является проблемой уровня модели ». –

0

Как вы можете прочитать на странице developer.apple, вы должны использовать атомные функции для экономии потока.

Вы можете прочитать больше о атомарных функциях здесь: Atomic Man page

Короче говоря: Atomic ~ не щепляемой ~ не разделяет нитями

+0

Ссылка, которую я дал, упоминает, что атомарное чтение/запись безопасно, но не потокобезопасное - это неправильно @SWiggles – user5214391

+0

Из документации: 'Атомные операции - это простая форма синхронизации, которая работает с простыми типами данных. Преимущество атомных операций заключается в том, что они не блокируют конкурирующие потоки. Для простых операций, таких как увеличение переменной счетчика, это может привести к значительно лучшей производительности, чем блокировка. «Для полной экономии потока вам нужно заблокировать свой код или использовать только методы threadave. – SWiggels

0

небезопасность Нити операций обусловлена ​​тем, что операция может можно разделить на несколько подопераций, например:

a = a + 1 

можно подразделить на операции

load value of a 
add 1 to the loaded value 
assign the calculated value to a. 

Слово «атомный» происходит от «атома», который исходит от греческого «атомоса», что означает «то, что не может быть разделено». Для операции это означает, что она всегда выполняется в целом, она никогда не выполняется на одну субоперацию за раз. Вот почему он является потокобезопасным.

TL; DR Atomic = поточный сейф.

Большое предупреждение: наличие свойств атома не означает, что целая функция/класс является потокобезопасной. Атомные свойства означают только то, что операции с заданными свойствами являются потокобезопасными.