2010-05-23 110 views
3

我正在pthreads上工作。我是新手,之前從未涉及pthreads。你們有沒有任何樣本代碼或資源可以幫助我完成任務?Pthread隊列系統

這是我的任務細節。約隊列系統中的並行線程程序:

寫C/C++的Pthread程序聲明的 陣列的大小N,其中N是隊列的一天的最大數目的整數的牙科診所的排隊系統。 pthread程序使用兩個線程。

每當有新的牙齒預約,第一個 線程(創建者)將隊列編號依次放入數組中。 第二個線程(移除器)只要 牙醫看到病人就從陣列中移除隊列號。這是以FIFO的方式完成的(先進先出)。 創建者的算法如下:

•如果陣列是不充分再放入一個新的號碼(號碼1 開始並且由一個每次遞增,因此創建者創建隊列數1 ,2,3等)

•睡眠1至10秒,隨機

•重複

去除劑的算法如下:

•如果陣列我s不爲空然後刪除其最小的隊列號。

•睡1〜10秒,隨機

•重複

您應該使用互斥鎖來保護必須保護的東西。每個線程 應該在屏幕上打印它正在做什麼(例如:「將13號添加到隊列中」, 「將7號從隊列中移除」等)。該計劃應該永遠運行。

任何幫助將不勝感激。 謝謝。

+0

嗨華萊士,歡迎來到SO!已經稍微編輯了你的文章以改進格式 - 應該幫助你得到一個好的答案! – 2010-05-23 22:30:59

回答

4

對於一般從pthreads開始,this是一個很好的網站,可能比你需要的信息更多(但我喜歡細節)。它貫穿了很多pthreads和更多的基礎知識。如果你更喜歡死樹教程,this book是相當不錯的,如果你想這麼稱呼的話,那麼你可以在Linux API的大部分功能或者核心庫上有很好的基礎。這stackoverflow question相當簡潔地處理互斥信號和信號量。

最後,我喜歡this site的Linux線程和同步的控制。

希望這些給你一些閱讀材料。弄清楚你如何處理線程,然後如何同步它們,然後攻擊你的問題。

+0

感謝您的網站。我會通過他們:) – Wallace 2010-05-24 11:02:35

+0

沒問題華萊士。繼續。一旦你想到它,API就不復雜;也不是電腦,儘管第一次嘗試潛入API-land時(與基本C相反),感覺就像它。谷歌,閱讀,識別問題,閱讀更多,嘗試解決,搜索更多,在這裏問,繼續搜索......你明白了! – 2010-05-24 18:36:26

0

這是一個典型的生產者 - 消費者問題。

有很多方法可以解決這個問題,但最簡單的方法是在隊列上鎖定一個鎖,並且在添加或刪除項目時,分別在生產者或使用者中鎖定隊列,執行工作,然後解鎖隊列。在消費者中,處理物品,並在生產者中繼續獲得新物品的工作。

您可能希望佈置數據結構,然後定義鎖定,具體描述鎖定的鎖定情況,以確保兩個線程訪問的所有數據都保持同步。

感謝您將此標記爲家庭作業;我希望這能讓你開始朝正確的方向發展。您也可能希望鎖定諸如打印到控制檯之類的內容,以確保這些操作不會重疊。

+0

嗯,我其實很困惑,因爲我是新人,對此不瞭解。但是對於Ninefingers的網站和你的算法,我希望我能在2天后完成這項任務。謝謝:) – Wallace 2010-05-24 11:04:01