2016-03-14 84 views
0

我有兩個進程將運行,一個將從共享內存(mmap)讀取,另一個將寫入該共享內存(mmap)。這些進程分別在兩個不同的終端中啓動,但它們需要同步,以便在一個進程正在寫入時,它會在另一個進程從內存中讀取之前寫入全​​部數量。我所看到的與共享內存互斥鎖有關的所有帖子都從一個主程序中產生線程/進程。有什麼辦法可以創建一個共享的互斥鎖,可以被兩個獨立的程序使用嗎?C多進程訪問共享內存互斥鎖

+0

參見http://stackoverflow.com/q/2389353。 –

+0

可能需要提高你的搜索技能。在stackoverflow之內和之外有很多答案。例如:[是否可以在Linux/UNIX上的多處理情況下使用互斥鎖?](http://stackoverflow.com/questions/9389730/is-it-possible-to-use-mutex-in-multiprocessing-case- on-linux-unix) – kaylum

+0

@kaylum,因爲它並不能真正解決OP的問題 - 第一個進程需要在第二個進程讀取它之前在共享內存中創建互斥鎖,並且無法確保創建互斥鎖。 – SergeyA

回答

0

對不起,但你運氣不好。 Pthreads庫沒有'命名'互斥體的概念,所以兩個獨立的進程不能可靠地共享一個。

是的,您可以在共享內存中創建互斥鎖,並且可以在其他進程中使用此互斥鎖,但是您無法確保互斥體在第二個進程中通過第一個進程完全初始化。對於trully獨立程序,我強烈建議使用信號量。

0

您可以在mmap ped文件中創建共享互斥鎖。如果您使用的是Linux並且擁有足夠新的內核,您甚至可以創建一個未鏈接的臨時文件mmap它;初始化互斥量,然後只有link it to the final location。或者,您可以使用文件鎖定來拒絕對它的訪問,直到初始化完成。

pthread_mutexattr_init POSIX manuals at linux.die.net的信號量示例在我的Linux 4.2.0-27 Ubuntu上確實有效。