Linux 線程間同步

背景知識:

線程 (thread) 線程指代可執(zhí)行代碼的一部分
進程 (process) 指代可執(zhí)行代碼论颅,可以包含多個線程

線程間同步的目的

解決多個線程讀寫同一個數(shù)據(jù)時很泊,造成的數(shù)據(jù)錯亂問題

線程間同步的方式

  1. 互斥鎖 (Mutex)
  • 目的:保證同一時刻只有一段代碼進入臨界區(qū)進行操作。
  • 做法:
    1. 第一段代碼進入臨界區(qū)之后苦蒿,執(zhí)行加鎖操作殴胧。
    2. 進入臨界區(qū)之前檢查鎖變量的bool值,如果為false則會放棄cpu等待進入掛起狀態(tài)刽肠,保存上下文切換部分溃肪。
    3. 直到鎖的狀態(tài)發(fā)生改變時再喚醒,線程激活進行恢復上下文音五。
  • 問題:由于存儲、恢復上下文會帶來一定的開銷羔沙,不要在性能敏感的地方使用
  1. 自旋鎖 (spinlock)
  • 目的:為了節(jié)約互斥鎖存儲恢復上下文的造成的開銷躺涝。
  • 做法:線程反復檢查鎖變量是否可用。
while (搶鎖(lock)==沒搶到) {
}
  • 問題: 會造成忙等待。
  1. 信號量 (Semaphore)
  • 目的:不需要使用忙等待的方法坚嗜。在信號量只有0或1的時候就是互斥鎖夯膀。
  • 做法:
    1. 創(chuàng)建一個同步對象作為信號量,該計數(shù)值范圍為0到最大值苍蔬。
    2. 線程對信號量等待 (wait) 時诱建,計數(shù)值減一;線程對信號量釋放 (release) 時碟绑,計數(shù)值加一俺猿。

會出現(xiàn)的問題

  1. 死鎖 (deadlock)
  • 出現(xiàn)時機: 兩個以上的線程,雙方都在等待對方停止運行格仲,以繼續(xù)運行押袍,但沒有一方提前退出。
死鎖示例:P1凯肋、P2兩個進程都需要有R1谊惭、R2兩個資源才能繼續(xù)運行。P1擁有R2侮东,需要R1才能繼續(xù)運行圈盔;P2擁有R1,需要R2才能繼續(xù)運行悄雅。都在互相等待药磺,導致死鎖。
  1. 數(shù)據(jù)競爭 (race hazard)
  • 出現(xiàn)時機:兩個進程同時修改一個共享內容煤伟,沒有并發(fā)控制的情況下癌佩,最后結果依賴于進程的執(zhí)行順序。并有可能會發(fā)生并發(fā)訪問沖突便锨。

參考文章

互斥鎖围辙,同步鎖,臨界區(qū)放案,互斥量姚建,信號量,自旋鎖之間聯(lián)系是什么吱殉?
信號量wiki
死鎖wiki
數(shù)據(jù)競爭wiki

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末掸冤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子友雳,更是在濱河造成了極大的恐慌稿湿,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件押赊,死亡現(xiàn)場離奇詭異饺藤,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門涕俗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罗丰,“玉大人,你說我怎么就攤上這事再姑∶鹊郑” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵元镀,是天一觀的道長绍填。 經(jīng)常有香客問我,道長凹联,這世上最難降的妖魔是什么沐兰? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮蔽挠,結果婚禮上住闯,老公的妹妹穿的比我還像新娘。我一直安慰自己澳淑,他們只是感情好比原,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杠巡,像睡著了一般量窘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上氢拥,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天蚌铜,我揣著相機與錄音,去河邊找鬼嫩海。 笑死冬殃,一個胖子當著我的面吹牛,可吹牛的內容都是我干的叁怪。 我是一名探鬼主播审葬,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼奕谭!你這毒婦竟也來了涣觉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤血柳,失蹤者是張志新(化名)和其女友劉穎官册,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體混驰,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡攀隔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年皂贩,在試婚紗的時候發(fā)現(xiàn)自己被綠了栖榨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昆汹。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖婴栽,靈堂內的尸體忽然破棺而出满粗,到底是詐尸還是另有隱情,我是刑警寧澤愚争,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布映皆,位于F島的核電站,受9級特大地震影響轰枝,放射性物質發(fā)生泄漏捅彻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一鞍陨、第九天 我趴在偏房一處隱蔽的房頂上張望步淹。 院中可真熱鬧,春花似錦诚撵、人聲如沸缭裆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澈驼。三九已至,卻和暖如春筛武,著一層夾襖步出監(jiān)牢的瞬間缝其,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工徘六, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留内边,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓硕噩,卻偏偏與公主長得像假残,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子炉擅,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容