2013-02-03 29 views
0

I fork()之后,孩子将进行一些涉及某些函数调用并设置一些标志的比较。父母直到最后等待孩子。在一种情况下,我不希望父母等待孩子(在后台运行)。我认为问题在于,孩子花了很长时间来设置标志,父母已经到了最后。在父进程和子进程之后显示该标志被正确设置,但没有被父节点正确读取。无论如何拖延父母?儿童设置父母阅读标志C

+2

你怎么看国旗?父母对内存所做的更改不可见,反之亦然。 – fuz

+0

FUZxxl是正确的。分叉创造了一个拥有自己记忆的新过程。除非您分配共享内存,否则您不能在子级中设置标志并让父级读取该标志。也许你只是想要一个单独的线程不是一个单独的过程? – Dipstick

+0

我不知道。我将如何分配共享内存? – user1991562

回答

0

您可以使用wait(2)使用孩子的pid来停止父母,直到孩子终止。正如Dipstick所说,如果没有必要创建一个新流程,那么一个线程会更好。线程使程序更复杂,但由于没有任务切换的事实,它比流程更高效(我猜是1000倍)。 考虑:Pthreads

0

一旦你从父母分岔一个孩子,他们成为不同的进程与他们自己的地址空间。因此,子变量对父变量不可见。

要在这两个过程之间进行通信。您应该使用这些IPC机制中的任何一种。我相信shared memory方法最适合您的需求,因为子进程获取父内存页面的快照。