[问题] 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