[問題] Multiprocess練習問題

作者: OhYiDay (小白Z)   2019-05-17 20:11:44
開發平台(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
作者: firejox (Tangent)   2019-05-17 20:20:00
你有同步嗎要同步就用lock 或semaphore 把你的critical section 包起來也就是讀sp 修改sp這段
作者: adrianshum (Alien)   2019-05-18 00:08:00
不同process 不能用semaphore 之類吧?(有些系統有names semaphore 之類已可以在不同process 共用)。單要達成multi-process 會不會考慮另一個簡單一點的方法?一個 process print 一個字元後,fork 一個 child 繼續印下一字元(然後子又生子...), 自己單純等child完(甚至直接完結就算了)
作者: firejox (Tangent)   2019-05-18 01:05:00
可以用semaphore 啊,他們都是從同一個process fork的你所講的只是把semaphore 區分為name跟uname 而已,就跟named pipe與unamed pipe的差異一樣
作者: aa0917954358 (Doem)   2019-05-18 19:03:00
葉亦成的OS齁
作者: leegogo (李狗狗)   2019-05-19 04:18:00
哈哈 楊的路過
作者: TitanEric (泰坦)   2019-05-19 13:18:00
學弟妹給推
作者: elements (Helianthus annuns)   2019-05-23 12:32:00
蠻好的題目 感謝分享

Links booklink

Contact Us: admin [ a t ] ucptt.com