C,XPMEM和锁

时间:2014-10-09 15:15:38

标签: c locking

我尝试使用XPMEM在不同进程之间共享部分虚拟内存。 这段内存包含一个共享数据结构,我想使用一个锁来命令访问它。

我可以使用C中提供的现有锁来避免忙于等待单个变量吗?

如果没有,我应该采用什么样的锁来减少缓存ping pong的影响?

非常感谢。

1 个答案:

答案 0 :(得分:3)

您可能必须实现自己的锁,因为现有的锁(pthread互斥锁)可能无法正常工作(posix信号量和pthread条件变量无法工作的原因相同)。限制来自于XPMEM如何将页面从一个应用程序映射到另一个应用程序。映射是通过页面帧号(PFN)完成的,这意味着在内存区域上调用xpmem_attach的一侧没有用户页面。这会导致调用futex_wake的任何代码出现问题,因为它依赖于get_user_pages_fast返回页面信息。如果页面不存在(与xpmem_attach返回的内存段的情况一样),futex_wake将返回EFAULT并且不会唤醒任何等待内存区域的线程。

我想弄清楚是否有办法解决这个问题。