[英]synchronization between processes using unnamed semaphores
在process-1
我试图将数据写入共享内存。 同时在process-2
我从同一共享内存中读取数据。 在这种情况下,我需要在这两个过程之间提供同步。 如果我要通过未命名的信号灯(使用shm_init(),mmap()
),是否可以使用?
我已经编写了这样的代码,不管行不行?
fd = shm_open("shm_name", O_CREAT| O_RDWR, S_IRUSR | S_IWUSR);
sema = mmap(NULL, sizeof(sem_t), PROT_READ | PROT_WRITE,MAP_SHARED , fd, 0);
sem_init(sema, 1, 1);
一般方法将起作用。 但是请注意以下几点:
shm_open(3)
的name
参数应以斜杠开头。 改为传递"/shm_name"
。 (在具有glibc的Linux上,它可以在没有斜线IIRC的情况下正常工作。) ftruncate(2)
调整fd
大小,否则当您尝试访问共享内存时将获得SIGBUS
。 每当您mmap(2)
一个文件时,您在映射中访问的任何内存实际上都必须存在于该文件中,并且POSIX共享内存对象的工作方式相同。 (在Linux上,它们被实现为/dev/shm
下的文件,该文件使用内存中的tmpfs 。) 对于后者,您可以执行以下操作:
typedef struct Shared_mem {
sem_t sem;
int shared_data[100];
} Shared_mem;
...
shared_mem = mmap(NULL, sizeof(Shared_mem), PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
...
sem_init(&shared_mem->sem, 1, 1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.