作者OhYiDay (小白Z)
看板C_and_CPP
標題[問題] Multiprocess練習問題
時間Fri May 17 20:11:44 2019
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1558095108.A.695.html
1F:推 firejox: 你有同步嗎 05/17 20:20
好像沒有耶 請問該如何做到同步呢@@
※ 編輯: OhYiDay (114.137.109.210), 05/17/2019 20:29:38
2F:→ firejox: 要同步就用lock 或semaphore 把你的critical section 包 05/17 20:41
好的 感謝!! 我去查一下
3F:→ firejox: 起來 05/17 20:41
4F:→ firejox: 也就是讀sp 修改sp這段 05/17 20:44
※ 編輯: OhYiDay (114.137.109.210), 05/17/2019 20:48:53
5F:→ adrianshum: 不同process 不能用semaphore 之類吧?(有些系統有na 05/18 00:08
有規定要一次fork全部的process 所以應該沒辦法用這個方法@@
6F:→ adrianshum: mes semaphore 之類已可以在不同process 共用)。單要 05/18 00:08
7F:→ adrianshum: 達成multi-process 會不會考慮另一個簡單一點的方法? 05/18 00:08
8F:→ adrianshum: 一個 process print 一個字元後,fork 一個 child 繼 05/18 00:08
9F:→ adrianshum: 續印下一字元(然後子又生子...), 自己單純等child 05/18 00:08
10F:→ adrianshum: 完(甚至直接完結就算了) 05/18 00:08
※ 編輯: OhYiDay (220.137.136.129), 05/18/2019 00:55:37
11F:推 firejox: 可以用semaphore 啊,他們都是從同一個process fork的 05/18 01:05
12F:→ firejox: 你所講的只是把semaphore 區分為name跟uname 而已,就跟n 05/18 01:14
13F:→ firejox: amed pipe與unamed pipe的差異一樣 05/18 01:14
14F:推 aa0917954358: 葉亦成的OS齁 05/18 19:03
對 被發現了 哈哈
※ 編輯: OhYiDay (42.73.159.62), 05/19/2019 03:31:07
15F:推 leegogo: 哈哈 楊的路過 05/19 04:18
16F:推 TitanEric: 學弟妹給推 05/19 13:18
17F:→ elements: 蠻好的題目 感謝分享 05/23 12:32