Starting from:
$35

$29

Prog. #3 Process Coordination Solution


一、 作業目的

基於pthread的方式來熟悉 process coordination的觀念。

二、 作業內容

【生產空拍機】為了要與空拍機大廠T公司競爭,G公司希望能透過機器人自動化生產新型的空拍機。在空拍機工廠中,有3個生產站(producer)及1個原料配件分配者(dispatcher)在負責生產空拍機。每一個生產站會不斷製造空拍機,但是要做好一個空拍機需要具備下面三種模組配件:battery(電池)、aircraft(機體)、和 propeller(螺旋槳)等。為了加快製造速度,3個producer分別各擁有一種模組配件的材料,而dispatcher則不斷隨機供應3種原料配件到一個供應前台,供應時並且不會與供應前台上面已經有模組配件重複。

每當dispatcher準備好2種原料,缺這2種原料的producer便可以向dispatcher取得這2種原料,加上本身擁有的原料,製成一個空拍機。完成後通知供應模組配件的dispatcher,dispatcher接著再隨機地準備另外三種模組配件放到供應前台上去。

請設計程式模擬這producer和dispatcher同步處理的動作。在程式中做出適當的輸出,顯示出工廠生產空拍機的情況。假設工廠每天生產完50個空拍機以後需要停工休息,請在生產出第50個空拍機的時候,結束程式,列印出來dispatcher準備了多少各種模組配件,並按照生產空拍機的數量多寡順序,印出每個producer總共生產出多少個空拍機。

因此,你的程式可能會印出來

$prog3

Dispatcher: propeller

Dispatcher: battery

Producer (aircraft): OK, 1 drone(s)

Dispatcher: battery



Producer (battery): OK, 15 drone(s)



Producer (propeller): OK, 40 drone(s)




三、 作業要點

    1. 請注意,本作業使用的程式語言是C/C++,測試平台的作業系統:  Ubuntu 16.10 64-bit。使用的編譯

程式為g++ 編譯器:5.4。其他平台或程式語言不在本次作業考慮範圍之內。如在測試平台上無法編譯與執行,都不予給分。

    2. 請注意,本作業必須要用 Pthread API中的 mutex機制來進行,例如pthread_mutex_init()。 不能使用semaphore機制,例如sem_init()。任何不用Pthread API mutex機制的程式,只能最多得到基本的30分。

    3. 本作業的評分方式如下: a. 【基本功能】

            i. 本作業必須以multithreaded的方式來完成,每個producer和dispatcher都各自是一個thread。沒有用此機制者,會扣50分。

            ii. 本作業在處理準備模組配件以及取用模組配件的程式碼部分,都必須以pthread API中的mutex機制形成critical section來設計。不使用此機制者,會扣50分。

            iii. 將分別考慮以下不同程度,按照正確性來給分。請在報告中說明自己完成的項目。

                1. [基本] 亂數的產生必須在主程式一開始就用 srand(0); 的方式設定亂數種子,每次執行都會產生相同的亂數序列。(助教會修改 seed 值,進行測試),最多可得10分。
                2. 正確使用pthread API 中的 mutex 機制形成critical section來處理 thread 之間的共用變數,最多可得20分。不使用此機制者,此部分 0分

                3. 以下依照程式可執行的程度評分:

                    a. 基礎程度 :程式中只有一個 dispatcher 與一個 producer (有 battery模組)總共 2 個threads,dispatcher只會隨機分配其他2種模組配件。在此情況下,可以正確產生50個空拍機,印出生產過程以及 dispatcher 與 producer 正確資料。如果程式只完成到此程度,最多可得40分。

                    b. 完整程度:程式中有一個dispatcher 與3個 producer 總共4個threads,每個producer可以正確產生空拍機,且可以產生總共 50 個空拍機,印出生產過程以及 dispatcher 與 producer 正確資料,如果程式可完成到此程度,最多可得70分。

        b. 【進階功能】完成以上基本功能者,才可按照以下項目,多得其他的分數。但請注意,如何demo

出你程式中的這些進階功能,必須在你的說明文件檔案中詳細說明,如果助教看不懂,可能反而會扣分。

            i. 工廠增加一個dispatcher B。原先的dispatcher A負責 battery與aircraft 2種不同模組配件的供應, dispatcher B 負責aircraft與propeller。供應模組配件的方式如基本要求:如果已經供應,便不再重複,而且供應時是隨機供應。所有的dispatcher都以thread方式實做。其餘要求與基本功能相同。

可以正確印出生產過程以及dispatcher 與 producer 正確資料,本功能最多可得40分。

具備此功能者,請用 argv[] 的方式讀入參數,1表示基本功能中一個dispatcher的情況, 2表示本進階功能中兩個dispatchers的情況。並用argc 來判斷有無參數,如果沒有參數,預設為基本功能(即參數為 1)。例如以下執行方式:

$prog3 2

Dispatcher A: battery

Dispatcher B: propeller

Producer (aircraft): OK, 1 drone(s)

Dispatcher A: aircraft




    4. 本作業需繳交檔案:

        a. 說明報告:檔案為docx或pdf格式。

            i. 報告中必須說明程式的設計理念、程式如何編譯,以及如何操作。

            ii. 報告中同時必須詳細說明你完成哪些部份。如有用到特殊程式庫,請務必說明。

            iii. 請務必讓助教明白如何編譯及測試你的程式。助教如果無法編譯或測試,會寄信(最多兩次)通知你來說明,但每說明一次,助教會少給你10分。

        b. 完整原始程式碼。不可含執行檔。助教會重新編譯你們的程式。

    5. 所有相關檔案,例如報告檔、程式檔、參考資料等,請壓縮成一個壓縮檔(不可超過2MB)後上傳至portal。請注意,不可抄襲。助教不會區分何者為原始版本,被判定抄襲者,一律0分。

四、 繳交方式:

    1. 最終繳交時間:

    a. 電子檔在 2017.06.02以前,上傳至個人portal。如有多個檔案,將所有檔案壓縮成zip(rar,7z 亦可)格式,然後上傳。

b. 上傳檔名格式:「學號 _ 作業號碼 .doc 」或「學號 _ 作業號碼 .rar 」 。 例如: 912233_01.doc 或912233_01.rar。

    2. 如有違規事項者,依照課程規定處理。

    3. 如需請假,請上portal請假,並持相關證明文件,在請假結束後的第一次上課時完成請假手續,並在一週內完成補交。補交作業將以8折計算。
    4. 老師不接受「門縫」方式繳交,助教也不接受任何作業。

五、  如有未盡事宜,將在個人portal板面公告通知。

六、  If you need any assistance in English, please contact Prof. Yang.

七、 參考資訊:

    1. 課本第6章

    2. “How to Use C Mutex Lock Examples for Linux Thread Synchronization”, http://www.thegeekstuff.com/2012/05/c-mutex-examples/?refcom

    3. “pthread ︰mutex”, http://angelonotes.blogspot.tw/2012/02/pthread-mutex.html

    4. 

More products