看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) clang++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 利用multiprocess印出一行字,每個process只能印一個字元 例如印出Hello, World! 需要13個process照順序印出每個字元 餵入的資料(Input):預期的正確結果(Expected Output): Hello, World! 錯誤結果(Wrong Output): 大部分時候正確印出Hello, World! 但有時候是其他無法預期的錯誤結果 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) https://ideone.com/9RI620 補充說明(Supplement): 我是利用shared memory使每個process共用一塊記憶體存int sp 每個process印出 s[*sp]後將(*sp)++ 第一次練習multiprocess,遇到這種狀況真的不知道怎麼debug 希望版上的大大可以指導一下QQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.137.136.129 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1558095108.A.695.html
firejox: 你有同步嗎 05/17 20:20
好像沒有耶 請問該如何做到同步呢@@ ※ 編輯: OhYiDay (114.137.109.210), 05/17/2019 20:29:38
firejox: 要同步就用lock 或semaphore 把你的critical section 包 05/17 20:41
好的 感謝!! 我去查一下
firejox: 起來 05/17 20:41
firejox: 也就是讀sp 修改sp這段 05/17 20:44
※ 編輯: OhYiDay (114.137.109.210), 05/17/2019 20:48:53
adrianshum: 不同process 不能用semaphore 之類吧?(有些系統有na 05/18 00:08
有規定要一次fork全部的process 所以應該沒辦法用這個方法@@
adrianshum: mes semaphore 之類已可以在不同process 共用)。單要 05/18 00:08
adrianshum: 達成multi-process 會不會考慮另一個簡單一點的方法? 05/18 00:08
adrianshum: 一個 process print 一個字元後,fork 一個 child 繼 05/18 00:08
adrianshum: 續印下一字元(然後子又生子...), 自己單純等child 05/18 00:08
adrianshum: 完(甚至直接完結就算了) 05/18 00:08
※ 編輯: OhYiDay (220.137.136.129), 05/18/2019 00:55:37
firejox: 可以用semaphore 啊,他們都是從同一個process fork的 05/18 01:05
firejox: 你所講的只是把semaphore 區分為name跟uname 而已,就跟n 05/18 01:14
firejox: amed pipe與unamed pipe的差異一樣 05/18 01:14
aa0917954358: 葉亦成的OS齁 05/18 19:03
對 被發現了 哈哈 ※ 編輯: OhYiDay (42.73.159.62), 05/19/2019 03:31:07
leegogo: 哈哈 楊的路過 05/19 04:18
TitanEric: 學弟妹給推 05/19 13:18
elements: 蠻好的題目 感謝分享 05/23 12:32