在我的应用程序中,我在父级和子级之间(在Linux和Windows上)为IPC使用共享内存。Linux的完整代码在上。
我在Linux上有下面的代码可以从共享内存中读取:
char buf[BUF_SIZE/4];
//pBuf is the shared memory location
sem_wait(semn);
//Wait for the parent process to write on the shared memory.
memcpy(buf, pBuf, sizeof(buf));
//Signal the parent
sem_post(sem0);
编写以下代码:
/
我正在编写的代码有很多调用来创建新的字符串之类的东西。但最近在将服务器升级到12.10 Ubuntu后,我开始遇到一些麻烦。一些子进程会卡在futex中。因此,我将GDB附加到在futex中运行了很长一段时间的进程,我执行了一个backtrace,并找到了以下日志
#0 0x00007f563afc69bb in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007f563af4a221 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007f563af47fa7 in mal
通常Linux中的崩溃报告可能如下所示:
[jack-VirtualBox:14564] *** Process received signal ***
[jack-VirtualBox:14564] Signal: Segmentation fault (11)
[jack-VirtualBox:14564] Signal code: (-6)
[jack-VirtualBox:14564] Failing at address: 0x3e8000038e4
[jack-VirtualBox:14564] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0
问题(简而言之):--我正在使用POSIX共享内存,目前只使用POSIX信号量--我需要控制多个阅读器、多个写入器。我需要在下面描述的限制范围内使用哪些变量/方法来控制访问。我找到了一种我想实现的方法,但是我不确定在使用POSIX共享内存时可以使用什么方法来实现它。
我找到的 这个链接有我想要使用的算法,但是我不知道如何用共享内存来实现它。我是否以某种方式将类存储在共享内存中?这里是我需要帮助的地方。我不确定的原因是我做了大量的研究,指出将共享内存保持在原语中只是为了避免解决问题,并且不能使用STL对象。
注意:对于我所有的多线程,我使用的都是C++11特性。这个共享内存将使用C++11 st
在信号处理程序中使用sem_post()是否依赖于未定义的行为?
/*
* excerpted from the 2017-09-15 Linux man page for sem_wait(3)
* http://man7.org/linux/man-pages/man3/sem_wait.3.html
*/
...
sem_t sem;
...
static void
handler(int sig)
{
write(STDOUT_FILENO, "sem_post() from handler\n", 24);
if (sem_post(&