首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用boost提供的共享内存和rt_signal (在linux中提供)用于实时系统安全吗?

使用boost提供的共享内存和rt_signal (在linux中提供)用于实时系统安全吗?
EN

Stack Overflow用户
提问于 2020-03-16 17:26:59
回答 1查看 353关注 0票数 0

我目前正在建设实时IPC系统。

我正在尝试构建一个没有所有不确定性组件的实时系统。

我试图建立基于共享内存模型的IPC。

使用boost库中的managed_shared_memory以减少不可预测的延迟是否安全?还是应该使用mmap()来共享内存?

另外,有从SIGRTMIN到SIGRTMAX的通道的rt_signal是否安全使用?

谢谢!顺便说一下,我是在抢占-rt补丁linux内核上使用它们的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-16 18:54:53

使用boost库中的managed_shared_memory以减少不可预测的延迟是否安全?还是应该使用mmap()进行内存共享?

使用是个昂贵的手术操作进程地址空间映射,因此您希望尽量减少使用mmap的次数。mmap是不可预测延迟的一个来源。

managed_shared_memory使用mmap,并在此基础上提供额外的功能,在使用mmap时,您需要实现这些功能。

您所使用的性能可能并不重要,因为mmap成本将占主导地位。

另外,有从SIGRTMINSIGRTMAX的通道的SIGRTMAX是否可以安全使用?

信号可能不是IPC的最佳选择,因为POSIX信号接口容易出现争用条件:进程ids被重用,以便pid参数在调用sigqueue时可以引用完全不同的进程。

信号只支持定向通信,不支持广播。对排队的实时信号的数量也有一个系统范围的限制.

处理信号的API也不方便,但随着signalfdpidfd_open的引入,这种情况最近发生了变化。

相对简单和健壮的基于消息的共享内存IPC是共享内存中的消息环缓冲区以及共享内存互斥量和条件变量。

Boost进程间库提供interprocess_mutexinterprocess_condition,对于环形缓冲区,您可以使用固定大小的boost::lockfree::spsc_queue

顺便说一下,我是在抢占-rt补丁linux内核上使用它们的。

你应该看2016年内核-谁需要一个实时操作系统(不是你!)-史蒂文·罗斯特特。实时基本上意味着缓慢,但保证死路一条。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60710511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档