Skip to Content
LINUX系統程式設計 第二版
book

LINUX系統程式設計 第二版

by Robert Love
December 2013
Intermediate to advanced
496 pages
8h 57m
Chinese
GoTop Information, Inc.
Content preview from LINUX系統程式設計 第二版
240
|
第七章
避免死結
避免死結很重要,而且唯一安全一致的辦法,是從一開始就把上鎖機制設計到你的多執
行緒化程式。關鍵在於排他鎖要關聯到資料(而非程式碼),而且要有清楚的資料(以
及排他鎖)層級。例如,死結的一個簡單的形式稱為 ABBA 死結或稱
致命擁抱
deadly
embrace
)。如果一個執行緒取得排他鎖 A 之後又要取得排他鎖 B,而另一個執行緒取得
排他鎖 B 之後又要取得排他鎖 A(因此是 ABBA),便會發生此情況。若時序正確,這
兩個執行緒都會成功取得它們的頭一個排他鎖:執行緒 1 持有排他鎖 A,而執行緒 2
有排他鎖 B。當它們接著去取得其他的排他鎖時,它們會發現該排他鎖已被其他的執行
緒持有,因此它們都會受到阻擋,直到排他鎖被釋出。因為每個持有排他鎖的執行緒也
都在等待對方的排他鎖,所以排他鎖不會被釋出,導致執行緒發生死結。
修正此問題需要明確的規則:取得排他鎖 B 之前必須先取得排他鎖 A。隨著你的程式變
得複雜,它的同步化也會因而變得複雜,導致這些規則的實施變得更為困難。設計程式
的時候需要早點開始加入這些明確的規則。
Pthread
Linux 核心對執行緒的支援僅提供了底層的基礎呼叫,例如
clone()
系統呼叫。任何的執
行緒程式庫有大部分位於用戶空間。許多大型軟體專案都會定義自己的執行緒程式庫:
例如,AndroidApacheGNOME Mozilla 都有提供它們自己的執行緒程式庫;此
外,一些程式語言,像是 C++11 Java,也會為執行緒提供標準程式庫的支援 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

AGILE學習手冊 | SCRUM、XP、精實和看板方法

AGILE學習手冊 | SCRUM、XP、精實和看板方法

Andrew Stellman, Jennifer Greene
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
算法技术手册(原书第2 版)

算法技术手册(原书第2 版)

George T.Heineman, Gary Pollice, Stanley Selkow

Publisher Resources

ISBN: 9789862769812