程序的互斥控制 卡車裝水問題

2021-08-28 10:54:27 字數 1009 閱讀 2170

題目:

兩個裝水工人併發的向卡車裝水,一次裝一箱,每輛卡車裝滿20箱即開走.試用基礎訊號量和普通變數實現10輛卡車裝水的偽**.

實現:

訊號量的設定:

名稱 初值 含義

part 1 車位數

mutex 1 控制工人裝水操作的完整性

empty 0 當前卡車還能裝多少箱水

go 0 當前裝滿水的卡車數

//卡車執行緒

void

car(

)//工人執行緒

void

worker()

signal

(judge);}

//main

intmain()

總結:

①.當遇到互斥控制的題目時,首先分析在**需要互斥控制,順序控制來決定訊號量的個數,並確定臨界區的範圍.

在本題中:

1.車位只有乙個,車有十輛,此處需要互斥.而當車走後,車位才會被釋放(part)

2.每車只能裝20箱,為了防止兩個工人多裝,重複裝,則裝箱操作需要互斥(empty)

3.對於箱數的自增變化需要互斥(mutex)

4.如何讓車在裝滿水之前等待? 可以用wait(go)來阻塞它,讓工人在裝滿水之後發出離開訊號signal(go).

②.當確定訊號量都是什麼之後,根據語義來定義其初始值

1.只有裝滿一輛車後才開走,在此之前只往這輛車裡裝,車位數可知為1

2.每車可裝20箱,則empty在卡車進入時增加20,初值為0,每個裝水工裝水之前申請乙個空位.

3.操作互斥變數的訊號量mutex初值置為1

4.車剛到肯定不能走,go訊號量初值為0,由工人來控制何時離開,建立兩程序間的關係.

③.根據訊號量的意義及範圍來在合適的位置釋放資源.如果過早會造成控制的失效,但更多數情況下需要注意的是過晚釋放資源,此時雖然不會造成嚴重的錯誤,但是會使整個程式的併發性降低,並影響程式效率.

程序控制遇到的問題

這週先學了程序環境和程序操作,對於什麼是程序有大致的乙個了解,但是沒有真正的明白到底什麼是程序。在程序控制這一章一開始學習的時候,在盡力的去理解什麼是程序,我理解的程序就是功能性的函式一樣,每實現乙個功能叫做乙個程序,也可以說是叫做過程,是比較具體的過程。第乙個問題 第11章程序管理的第乙個示例程式...

程序的同步與互斥 哲學家問題

哲學家問題 問題描述 乙個房間內有5個哲學家,他們的生活就是思考和進食。房間裡有一張圓桌,中間放著一盤通心粉 假定通心粉無限多 桌子周圍放有五把椅子,分別屬於五位哲學家每兩位哲學家之間有一把叉子,哲學家進食時必須同時使用左右兩把叉子。解答 程序 philosopher 哲學家 共有的資料結構 過程 ...

四種程序或執行緒同步互斥的控制方法

四種程序或執行緒同步互斥的控制方法 1 臨界區 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。2 互斥量 為協調共同對乙個共享資源的單獨訪問而設計的。3 訊號量 為控制乙個具有有限數量使用者資源而設計。4 事 件 用來通知執行緒有一些事件已發生,從而啟動後繼任務的開始。臨界區...