我正在使用信号量处理一些代码,包括进程之间的通信。我做了这样的结构:
typedef struct container {
sem_t resource, mutex;
int counter;
} container;
并以这种方式使用(在主应用程序中,在从属进程中相同)
container *memory;
shm_unlink("MYSHM"); //just in case
fd = shm_open("MYSHM", O_RDWR|O_CREAT|O_EXCL, 0);
if(fd == -1) {
printf("Error");
exit(EXIT_FAILURE);
}
memory = mmap(NULL, sizeof(container), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
ftruncate(fd, sizeof(container));
当我使用其中一个 sem_ 函数时一切都很好,但是当我尝试做类似的事情时
memory->counter = 5;
它不起作用。可能我的指针有问题,但我几乎尝试了所有方法,但似乎没有任何效果。也许有更好的方法在进程之间共享变量、结构等?不幸的是,我不允许使用 boost 或类似的东西,代码用于教育目的,我打算尽可能简单。