【发布时间】:2016-05-25 22:47:54
【问题描述】:
问题(简而言之): 我正在使用 POSIX 共享内存,目前只使用 POSIX 信号量,我需要控制多个读取器、多个写入器。我需要有关可用于在下述限制内控制访问的变量/方法的帮助。 我找到了一种我想要实现的方法,但我不确定在使用 POSIX 共享内存时可以使用什么方法来实现它。
我发现了什么 https://stackoverflow.com/a/28140784 这个链接有我想使用的算法,但我不确定如何用共享内存来实现它。我是否以某种方式将课程存储在共享内存中?这是我需要帮助的地方。 我不确定的原因是我的大量研究,指出将共享内存保留为原语只是为了避免解决问题并且无法使用 STL 对象。
注意: 对于我所有的多线程,我都在使用 C++11 功能。该共享内存将是使用 C++11 std::threads 的完全独立的程序可执行文件,任何进程/可执行文件的任何线程都希望从中访问。我已经为我的任何多线程避免了 Linux pthread,并将继续这样做(除非它只是控制变量而不是实际的 pThreads)。
解决方案参数针对
- 必须在 2+ 个进程之间共享,这些进程将运行多个可能希望访问的 C++11 std::thread。 IE。多个写入器(一次独占一个),同时在没有写入器想要访问时允许多个同时读取器。
- 不使用 BOOST 库。理想情况下是原生 C++11 或内置 linux 库,无需安装抽象库即可工作。
- 不使用 pThread 实际线程,但可以从那里使用一些可与 C++11 std::thread 一起使用的对象。
- 理想情况下可以在运行时处理进程崩溃。例如。如果进程在拥有信号量时崩溃,则使用 POSIX 信号量,每个人都被搞砸了。我见过有人使用文件锁吗?
提前致谢
【问题讨论】:
-
尝试了一些我发现的东西,但仍然无济于事。 stackoverflow.com/questions/20325146/… 如果您运行两个完全独立的可执行文件,这里的解决方案将不起作用。我注释掉了叉子,运行它。然后我注释掉父部分和互斥体初始化器并重新编译并运行分叉的子进程。不工作。但是,如果你从同一个可执行文件中按原样运行,它就可以工作.....
标签: c++ multithreading c++11 posix shared-memory