2013-02-03 59 views
0

I fork()之後,孩子將進行一些涉及某些函數調用並設置一些標誌的比較。父母直到最後等待孩子。在一種情況下,我不希望父母等待孩子(在後臺運行)。我認爲問題在於,孩子花了很長時間來設置標誌,父母已經到了最後。在父進程和子進程之後顯示該標誌被正確設置,但沒有被父節點正確讀取。無論如何拖延父母?兒童設置父母閱讀標誌C

+2

你怎麼看國旗?父母對內存所做的更改不可見,反之亦然。 – fuz

+0

FUZxxl是正確的。分叉創造了一個擁有自己記憶的新過程。除非您分配共享內存,否則您不能在子級中設置標誌並讓父級讀取該標誌。也許你只是想要一個單獨的線程不是一個單獨的過程? – Dipstick

+0

我不知道。我將如何分配共享內存? – user1991562

回答

0

您可以使用wait(2)使用孩子的pid來停止父母,直到孩子終止。正如Dipstick所說,如果沒有必要創建一個新流程,那麼一個線程會更好。線程使程序更復雜,但由於沒有任務切換的事實,它比流程更高效(我猜是1000倍)。 考慮:Pthreads

0

一旦你從父母分岔一個孩子,他們成爲不同的進程與他們自己的地址空間。因此,子變量對父變量不可見。

要在這兩個過程之間進行通信。您應該使用這些IPC機制中的任何一種。我相信shared memory方法最適合您的需求,因爲子進程獲取父內存頁面的快照。