臨界區塊(Critical section)指的是一個訪問共用資源(例如:共用設備或是共用存儲器)的程序片段,而這些共用資源有無法同時被多個線程訪問的特性。(不是字面意思的一個區域,是程序片段的集合)
?
1. 為了完成一件事,匯編有時會分成多條指令進行執行。
2.進程有一定的時間片,用完了自己的時間片就會被切換下去。
這就帶來了問題:如果沒有執行完,就被切換下CPU,會造成意想不到的問題。
處理方法:
加鎖
使用原語操作,不允許被中斷(即使用完了時間片,也不下來;忽視搶占)
?
為什么需要同步?
1. 進程間的時序關系。但是初始狀態下,任意進程都可能上CPU,它們是無序的
錯題
3。
以下是解決進程互斥進入臨界區的一種解法。
P:
???? … …
???? pturn = true;
???? while (qturn) ;
???????? 臨界區操作
???? pturn = false;
???? … …
Q:
???? … …
???? qturn = true;
???? while (pturn) ;
???????? 臨界區操作
???? qturn = false;
???? … …
其中,pturn、qturn的初值為false
如果P、Q兩個進程同時想進入臨界區,那么會發生下面哪一種情形?
條件并不是代碼中寫的那樣,應該是:
所以答案是兩者都不能進入
?
下列描述的四個現象中,哪一項既具有同步關系又具有互斥關系?
多個不同的用戶進程一起玩麻將電子游戲
多個不同的用戶進程編譯自己的程序
多個不同的用戶進程一起玩踢足球電子游戲
多個不同的用戶訂票進程訪問票額數據庫
?
互斥:兩個或多個進程?在讀寫某些共享數據的時候,像這個 in?就是共享數據 而最后的結果取決于進程運行的一個精確的時序?就是時間序列,就是它一跟時間是相關的 那么這就是帶來了競爭條件?所以競爭條件呢,是由于有這樣一個共享的資源,共享的數據,而多個進程?都對這個數據進行相應的操作帶來的 那么這樣就產生了這樣一個概念--進程互斥?由于在一個并發環境里頭 多個進程,都要使用一些共享資源,像?一些變量啊,像一些文件啊,而這些資源呢 具有這樣一個性質,它需要排他性的使用,也就是說我用?那么另外一個進程就不能用,這是一種排他性的使用 因此,各個進程之間對這個資源的使用?是一種競爭,是一種競爭,而這種競爭呢 我們就稱之為進程的互斥
同步:互斥?它指的是進程之間具有一種競爭關系?而進程的同步呢實際上是指的多個進程之間的協作關系?那么什么是進程的同步呢??它是指的在多個進程中 發生的事件存在著某種時序關系?需要這些進程相互合作,共同完成一項任務?更具體的一點來說,就是 有多個進程,其中一個進程執行到了某一點?它要求另外一個進程為它提供消息?而另外這個進程呢由于它們是相互合作的,所以是它的一個伙伴進程?因此第一個進程需要第二個進程給它提供消息?在沒有獲得這個消息的時候,也就是消息沒有到達?那么這個事件還沒有發生,那么前一個進程?就要進入阻塞態,就要等這個消息,一旦這個消息到達,也就是說這個事件發生了?就把前面這個進程喚醒,讓它?重新就緒,實際上我們所談的是一個進程之間的一個協作關系
?
感覺這個題目不嚴謹
足球游戲:
互斥:球是互斥的。只能被一個進程使用
同步:足球傳遞過來,才能進行下一步?
麻將游戲:
互斥:
同步:
在使用信號量及P、V操作機制解決問題時,進程執行一次P操作,意味著該進程
準備釋放一個資源
正在使用一個資源
申請分配一個資源
需要共享一個資源