ios 的 atomic/nonatomic ,atomic 不保證線程安全

前言

atomic/nonatomic 是屬性修飾符之一摔笤,atomic 代表原子性,nonatomic 代表非原子性垦写;

原子性是防止方法調(diào)用到一半其它操作再次進(jìn)入該方法吕世,導(dǎo)致出現(xiàn)異常情況。

atomic 和 nonatomic 區(qū)別以及實(shí)現(xiàn)

首先我們知道 atomic 代表原子性梯投,nonatomic 代表非原子性命辖;用這兩個(gè)修飾符來(lái)修飾屬性,區(qū)別主要在于屬性的 getter/setter 方法:atomic 會(huì)對(duì) setter 方法進(jìn)行加鎖分蓖,nonatomic 不會(huì)對(duì) setter 方法加鎖尔艇。

atomic 修飾的屬性,在 setter 方法中使用@synchronized加鎖來(lái)確保原子操作么鹤,但是@synchronized相比于其它類型的鎖终娃,性能是最低效的,因?yàn)槌思渔i之外蒸甜,額外還會(huì)設(shè)置異常處理機(jī)制棠耕,性能消耗較大。這里就是為什么平時(shí)開發(fā)中很少使用 atomic 來(lái)修飾屬性迅皇。

atomic 與 nonatomic 在 getter/setter 方法區(qū)別如下:

atomic 不保證線程安全

atomic 只會(huì)保證 setter/getter 方法是原子操作的昧辽,防止方法調(diào)用到一半其它操作再次進(jìn)入該方法,導(dǎo)致出現(xiàn)異常情況登颓。即原子性保證你訪問(wèn)的時(shí)候給你返回一個(gè)完好無(wú)損的對(duì)象搅荞,但是不會(huì)保證線程安全,這里有個(gè)經(jīng)典的例子:

如果線程 A 調(diào)了 getter框咙,與此同時(shí)線程 B 咕痛、線程 C 都調(diào)了 setter——那最后線程 A get 到的值,有3種可能:可能是 B喇嘱、C set之前原始的值茉贡,也可能是 B set的值,也可能是 C set的值者铜。同時(shí)腔丧,最終這個(gè)屬性的值放椰,可能是 B set的值,也有可能是 C set的值愉粤。所以atomic可并不能保證對(duì)象的線程安全砾医。

這個(gè)問(wèn)題其實(shí)包括兩個(gè)塊內(nèi)存,一個(gè)是棧區(qū)指針的內(nèi)存A衣厘,一個(gè)是堆區(qū)對(duì)象占用的內(nèi)存B如蚜。

atomic 只是對(duì)屬性的 getter/setter 方法加自旋鎖,也就是對(duì)A加鎖影暴,這樣可以保證A是線程安全的错邦。這樣并沒(méi)有對(duì)B做任何處理,所以B不是線程安全的型宙。

如果一個(gè)對(duì)象的改變不是直接調(diào)用 getter/setter 方法撬呢,而是直接對(duì)對(duì)象內(nèi)部屬性修改、字符串拼接妆兑、數(shù)組增加和移除元素等操作倾芝,就不能保證這個(gè)對(duì)象是線程安全的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末箭跳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子潭千,更是在濱河造成了極大的恐慌谱姓,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刨晴,死亡現(xiàn)場(chǎng)離奇詭異屉来,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)狈癞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門茄靠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蝶桶,你說(shuō)我怎么就攤上這事慨绳。” “怎么了真竖?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵脐雪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我恢共,道長(zhǎng)战秋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任讨韭,我火速辦了婚禮脂信,結(jié)果婚禮上癣蟋,老公的妹妹穿的比我還像新娘。我一直安慰自己狰闪,他們只是感情好疯搅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尝哆,像睡著了一般秉撇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秋泄,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天琐馆,我揣著相機(jī)與錄音,去河邊找鬼恒序。 笑死瘦麸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歧胁。 我是一名探鬼主播滋饲,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼喊巍!你這毒婦竟也來(lái)了屠缭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤崭参,失蹤者是張志新(化名)和其女友劉穎呵曹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體何暮,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奄喂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了海洼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片跨新。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖坏逢,靈堂內(nèi)的尸體忽然破棺而出域帐,到底是詐尸還是另有隱情,我是刑警寧澤词疼,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布俯树,位于F島的核電站,受9級(jí)特大地震影響贰盗,放射性物質(zhì)發(fā)生泄漏许饿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一舵盈、第九天 我趴在偏房一處隱蔽的房頂上張望陋率。 院中可真熱鬧球化,春花似錦、人聲如沸瓦糟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)菩浙。三九已至巢掺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間劲蜻,已是汗流浹背陆淀。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留先嬉,地道東北人轧苫。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像疫蔓,于是被迫代替她去往敵國(guó)和親含懊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容