Buzz words
Synchronization(同步 ) Race Condition(競(jìng)爭(zhēng)條件) Data race(數(shù)據(jù)競(jìng)爭(zhēng)) Mutual exclusion(互斥現(xiàn)象) Critical section/region(臨界區(qū)) Atomic operation(原子操作)
為什么需要同步機(jī)制
現(xiàn)代操作系統(tǒng)設(shè)計(jì)的要點(diǎn)是多進(jìn)程/線程
-
同步很重要
舉個(gè)例子,如果你和你的另一半分別從銀行取1000,取錢的步驟包括
查詢余額,取錢扣錢,更新余額。
那你們可能差不多先都查詢到了余額為10000,
各自取了1000,兩個(gè)ATM機(jī)計(jì)算出來(lái)的余額為9000,
于是ATM機(jī)寫(xiě)回了9000
這樣的話銀行會(huì)不開(kāi)心,但如果換成存錢呢?
---
###Data races
**對(duì)共享數(shù)據(jù)的訪問(wèn)是需要同步的**
分析這個(gè)問(wèn)題時(shí),首先分析有哪些共享的數(shù)據(jù)。(老師的課件里面的例子中有粉筆和計(jì)數(shù)器)
- 什么情況下數(shù)據(jù)會(huì)被共享?
- 局部變量是不會(huì)被共享的,它是私有的。
>此處的局部變量是指棧上的數(shù)據(jù),每個(gè)線程有自己的棧,不會(huì)出現(xiàn)將一個(gè)指向棧上的數(shù)據(jù)的指針從線程T1傳遞給線程T2
- 全局變量和靜態(tài)變量是被共享的
>因?yàn)樗鼈兌即鎯?chǔ)在可執(zhí)行文件的數(shù)據(jù)段(data segment)中
- 堆上的數(shù)據(jù)和一些動(dòng)態(tài)對(duì)象是被共享的
>雖然每個(gè)線程有自己的棧,但這些棧是在進(jìn)程的棧空間中劃出來(lái)的。這些棧對(duì)線程是私有的,但進(jìn)程的堆空間是共享的??梢酝ㄟ^(guò)指向堆的指針訪問(wèn)。一般這些指針與```new```和```delete```有關(guān)。

- 如何判斷是否會(huì)發(fā)生data races?
- 假設(shè)只有讀和寫(xiě)是原子的。(**有的架構(gòu)連這一點(diǎn)都做不到**)
- 假設(shè)上下文切換/調(diào)度可以發(fā)生在任何時(shí)候
- 假設(shè)你可以無(wú)期限地推遲一個(gè)線程被調(diào)度的時(shí)機(jī),甚至可以認(rèn)為它永遠(yuǎn)不會(huì)調(diào)度。
---
### Critical Sections
**我們希望能夠通過(guò)互斥的方式進(jìn)行同步**
因?yàn)檫@樣我們能夠進(jìn)行更大的原子操作。
- 使用互斥來(lái)進(jìn)行同步的代碼段被稱為**臨界區(qū)**
- 一次只能有一個(gè)線程進(jìn)入臨界區(qū)
- 所有其他的線程都被強(qiáng)制在臨界區(qū)外等候
- 只有當(dāng)一個(gè)線程離開(kāi)臨界區(qū)的時(shí)候,另外一個(gè)線程才能進(jìn)入
對(duì)臨界區(qū)應(yīng)該有什么樣的使用原則?
- ```避免競(jìng)爭(zhēng)的四個(gè)條件:```
- 線程的運(yùn)行速度可以任意變化,CPU的數(shù)量可以任意多
- 兩個(gè)線程不可以同時(shí)進(jìn)入臨界區(qū)
- 不能有在臨界區(qū)外的其他線程會(huì)阻礙臨界區(qū)內(nèi)的線程
- 線程不能永遠(yuǎn)沒(méi)有進(jìn)入臨界區(qū)的機(jī)會(huì)
- ```臨界區(qū)使用的三個(gè)原則:```
- 互斥訪問(wèn)(如果Pi在臨界區(qū)中,則不能有其他任何線程在臨界區(qū)中)
- 如果沒(méi)有線程在臨界區(qū)中,并且有一些線程想要進(jìn)入臨界區(qū),那么只有那些在等待中的線程能夠參與關(guān)于誰(shuí)接下來(lái)進(jìn)臨界區(qū)的決策。而且這個(gè)選擇不能被無(wú)限制地延長(zhǎng)。
- 有限等待
那么臨界區(qū)具體應(yīng)該怎么實(shí)現(xiàn)呢?
- [原子讀寫(xiě)操作](http://www.itdecent.cn/p/8286b118a294)
- [鎖](http://www.itdecent.cn/p/59d346bb39fa)
- [信號(hào)量](http://www.itdecent.cn/p/b855fe91db88)
- [管程]()
- [Messages]()
---