程序同步與非同步 軟體實現(演算法)

2022-03-24 04:23:26 字數 677 閱讀 1004

一,初步設想

讓兩個程序實現同步與互斥訪問臨界資源。

偽**:

turn 。。0 1

p0while turn=1 do

《臨界區》

turn := 1

p1while turn=0 do

《臨界區》

turn := 1

問題:turn 為0時,程序p0在進入臨界區前(在臨界區外),如果發生失敗,則會影響其他程序的執行。同理,反過來,turn 為1時,程序p1也會影響程序p0的執行。

此外,其中的另乙個程序在臨界區內失敗,從而沒能將turn的值改變,也會影響其他程序的執行。  

總之,無論程序在臨界區內還是臨界區外,都會影響其他程序的執行。並且,他們必須交錯執行。

第一次改進:

「初步設想」,留下乙個問題,就是上面說的。究其原因,就是其中乙個程序的執行,要依託另外乙個程序的執行。為了解決「初步設想」中遺留的問題,我們用乙個標誌flag,標誌臨界區是否處於被占用狀態。

flat[0],flat[1] 為ture時,分別表示p0,p1他們占用臨界區;當他們為false時,分別表示p0,p1沒有占用臨界區。至於為什麼要這樣設定,我個人把這種思想,定義為"陣列法","陣列法",這個名稱,當然是為了讓我理解。(當然可能有別的更好的名稱)。

在這裡我不得不先提到我在 學習linux的時候,

程序同步與非同步

過程的執行有一定的順序,也就是說必須一步一步執行。舉個例子,在socket中,伺服器accept 等待客戶端的連線,這裡的等待實際上就是阻塞了,在客戶端連線之前,該過程不會往下執行。在同步阻塞中,應用程式執行到需要io操作,會執行乙個系統呼叫,然後講控制權交給核心,此時應用程式便發生的堵塞。核心得到...

程序同步及非同步的概念

所謂同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事.就像早上起床後,先洗涮,然後才能吃飯,不能在洗涮沒有完成時,就開始吃飯.按照這個定義,其實絕大多數函式都是同步呼叫 例如sin,isdigit等 但是一般而言,我們在說同步 ...

程序通訊與程序同步

多個程序可以共享系統中的各種資源,但其中許多資源一次只能為乙個程序使用,我們把一次僅允許乙個程序使用的資源稱為臨界資源。許多物理裝置都屬於臨界資源,如印表機等 對臨界資源的訪問必須互斥進行,在每個程序中,訪問臨界資源的那段 稱為臨界區。程序通訊與同步的目的主要有下面 1 資料傳輸 乙個程序需要將他的...