2013-08-07 81 views
-1

我目前正在研究一個需要我同時運行兩個進程(P1和P2)的項目。 P1和P2都有多個線程在運行。所有這些線程都應該能夠寫入一個受互斥鎖保護的日誌文件。多進程,一個互斥體

我到目前爲止: FILE *是P1中的一個全局變量,我用一個互斥鎖來保護它免受試圖寫入它的多個線程的影響。這似乎工作正常。

現在我想知道如何從P2獲得線程寫入相同的日誌文件,同時保護它免受來自P1和P2的同時寫入嘗試。我可能確實是錯誤的,但我認爲如果我在聲明日誌文件指針和互斥鎖之後分叉,P1中的互斥鎖將只保護來自P1中多個線程的寫入嘗試,並且P2中的互斥鎖將僅保護P2中的線程多次寫入嘗試。 有沒有解決這個問題的簡單方法?如果有人能夠幫助我解決這個問題,我會非常開心,但我一直在嘗試許多事情,但沒有成功。

編輯:我不知道共享INTER-PROCESS MUTEX。當我有一些工作時,我會把我的代碼放好。

+2

閱讀[文件鎖定](http://en.wikipedia.org/wiki/File_locking)。 –

+2

或使用共享進程間互斥。 –

+0

謝謝。我不知道進程間互斥。我認爲他們是嚴格內部流程的。我會仔細看看的!任何人都可以告訴我爲什麼我的問題被低估?是否因爲我沒有顯示代碼?謝謝 – Joe

回答

0

隨着人們評論說,您可以使用進程共享的互斥。在Unix/Linux上,包括創建一個包含該互斥鎖的共享內存並將其映射到兩個進程中。

但是在Linux上,您可以依靠的事實是阻止write()系統調用到文件中是原子的。也就是說,您可以將多個進程登錄到同一個文件中,只要它們將完整的行傳遞到write()中,文件中的行不會被破壞。 POSIX不需要文件的這種原子性,但是,我記得讀過Linus Torvalds的評論說,一個不支持這種文件系統的文件系統對於Linux來說並不適用。