自旋鎖和互斥鎖

一、多線程環(huán)境下的安全問(wèn)題

  • 由于一個(gè)資源可以被多個(gè)線程同時(shí)訪問(wèn)查邢,這樣有可能會(huì)導(dǎo)致數(shù)據(jù)混亂蔗崎,引發(fā)數(shù)據(jù)的安全問(wèn)題,所以說(shuō)在多線程環(huán)境下扰藕,原子操作是必要的缓苛。

  • 本文中介紹一下自旋鎖和互斥鎖。

    • 自旋鎖:當(dāng)給實(shí)例變量的@property設(shè)置atomic屬性的時(shí)候邓深,會(huì)給這個(gè)變量加一個(gè)自旋鎖未桥。
    • 互斥鎖:通過(guò)@synchronized來(lái)創(chuàng)建一個(gè)互斥鎖。多線程環(huán)境下芥备,如果訪問(wèn)同一個(gè)資源冬耿,那么必須使用同一把鎖才能鎖住。
  • 比如說(shuō):去銀行自助取款機(jī)取錢(qián)萌壳,如果另外一個(gè)地方有個(gè)人也在使用你的銀行卡號(hào)進(jìn)行存錢(qián)亦镶,那么此時(shí)就使用atomic和nonatomic中的哪個(gè)呢日月?很明顯,選擇atomic缤骨,因?yàn)橥瑫r(shí)進(jìn)行兩個(gè)操作爱咬,對(duì)于同一個(gè)賬號(hào),很可能會(huì)造成數(shù)據(jù)的混亂绊起,所以必須要進(jìn)行加鎖精拟,限制用戶的訪問(wèn)。


二勒庄、自旋鎖

  • OC在定義屬性的時(shí)候有atomic和nonatomic兩種方式
    • atomic:原子屬性串前,線程安全,需要消耗大量的資源实蔽,只會(huì)給setter方法加鎖荡碾,不會(huì)給getter方法加鎖
    • nonatomic:非原子屬性,非線程安全局装,不會(huì)給setter方法加鎖坛吁,在像iPhone這種內(nèi)存較小的移動(dòng)設(shè)備上,如果沒(méi)有多線程間的通信铐尚,那么nonatomic就是一個(gè)非常好的選擇拨脉。
    • 一般情況下,我們都只需要在主線程中進(jìn)行操作的宣增,所以是不需要加鎖的玫膀。
    • 應(yīng)用場(chǎng)景:
      比較適合做一些不耗時(shí)的操作

三、互斥鎖

  • 在多線程開(kāi)發(fā)中爹脾,我們采用@synchronized來(lái)創(chuàng)建一個(gè)互斥鎖帖旨,保證在同一時(shí)刻只有一個(gè)線程對(duì)其進(jìn)行操作。
  • 開(kāi)發(fā)中如果需要加鎖灵妨,只用使用self就行了解阅。
@synchronized(self){
        NSInteger currentNum = self.totalNum;
        if (currentNum > 0) {
            self.totalNum = currentNum - 1;
            NSLog(@"%@賣(mài)了一張票,還剩下%zd張票",[NSThread currentThread].name,self.totalNum);
        } else {
            return;
        }
    }

四、互斥鎖和自旋鎖的比較

  • 共同點(diǎn):多線程環(huán)境下泌霍,都可以保證在同一時(shí)刻只有一個(gè)線程在使用被鎖住的代碼塊货抄。
  • 區(qū)別:自旋鎖對(duì)比互斥鎖,它不會(huì)在等待上一個(gè)線程執(zhí)行任務(wù)結(jié)束之前進(jìn)入睡眠狀態(tài)朱转,直至上一個(gè)任務(wù)執(zhí)行完畢蟹地,再進(jìn)行喚醒和執(zhí)行任務(wù)。因此藤为,互斥鎖會(huì)比自旋鎖鎖住的代碼執(zhí)行的時(shí)間長(zhǎng)锈津。
  • 舉例說(shuō)明:兩個(gè)人去上廁所,一個(gè)人比較急凉蜂,一個(gè)人不急,比較急的相當(dāng)于是訪問(wèn)自旋鎖鎖住的代碼的那個(gè)對(duì)象,而不急的那個(gè)人是訪問(wèn)互斥鎖鎖住的代碼的那個(gè)對(duì)象窿吩。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末茎杂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子纫雁,更是在濱河造成了極大的恐慌煌往,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轧邪,死亡現(xiàn)場(chǎng)離奇詭異刽脖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)忌愚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)曲管,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人硕糊,你說(shuō)我怎么就攤上這事院水。” “怎么了简十?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵檬某,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我螟蝙,道長(zhǎng)恢恼,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任胰默,我火速辦了婚禮场斑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘初坠。我一直安慰自己和簸,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布碟刺。 她就那樣靜靜地躺著锁保,像睡著了一般。 火紅的嫁衣襯著肌膚如雪半沽。 梳的紋絲不亂的頭發(fā)上爽柒,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音者填,去河邊找鬼浩村。 笑死,一個(gè)胖子當(dāng)著我的面吹牛占哟,可吹牛的內(nèi)容都是我干的心墅。 我是一名探鬼主播酿矢,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼怎燥!你這毒婦竟也來(lái)了瘫筐?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤铐姚,失蹤者是張志新(化名)和其女友劉穎策肝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體隐绵,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡之众,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了依许。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棺禾。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖悍手,靈堂內(nèi)的尸體忽然破棺而出帘睦,到底是詐尸還是另有隱情,我是刑警寧澤坦康,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布竣付,位于F島的核電站,受9級(jí)特大地震影響滞欠,放射性物質(zhì)發(fā)生泄漏古胆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一筛璧、第九天 我趴在偏房一處隱蔽的房頂上張望逸绎。 院中可真熱鬧,春花似錦夭谤、人聲如沸棺牧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)颊乘。三九已至,卻和暖如春醉锄,著一層夾襖步出監(jiān)牢的瞬間乏悄,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工恳不, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留檩小,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓烟勋,卻偏偏與公主長(zhǎng)得像规求,于是被迫代替她去往敵國(guó)和親筐付。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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