2012-07-13 21 views
7

兩個Linux進程打開並mmap相同的/ dev/shm/shared內存文件並將其用作公共內存。問題:一個進程「喚醒」另一個進程以通知它應該在內存中查找的最簡單和最好的方法是什麼? 例如,一個進程是否可以爲其他進程的文件描述符導致poll()事件? 該解決方案不需要便攜,但我希望它很簡單。在共享內存文件上導致Linux輪詢事件

回答

2

這就是爲什麼POSIX有條件變量。

在共享內存區域中定義共享的POSIX條件變量及其關聯的互斥鎖。

然後有一個線程等待條件變量,另一個線程則希望另一個線程在內存中查找條件變量事件。

網絡上有很多關於條件變量的內容。 這是一個很不錯的短的一個:https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables

0

你也可以考慮使用信號量(POSIX命名的信號量)來解決這個問題。

一個簡單的例子,使用共享內存(在它是在系統V,但可以與POSIX使用它太的例子)和POSIX信號是在鏈路, How can 2 processes talk to each other without pipe()?