如何用共享内存初始化未命名的信号量?
how to initiliaze unnamed semaphore with shared memory?
我知道未命名信号量应该在共享内存区,但我不知道如何实现,因为 mmap() returns 指向映射区域的指针,我不得不使用 sem_t 指针,但这一次,我认为它不太安全。这是我所做的,
sem_t *sem;
char* name = "sharedSem";
int fd;
sem_init(sem, 1, 1);
fd = shm_open(name, O_CREAT | O_RDWR, 0666);
if(fd == -1)
{
perror("fail");
exit(-1);
}
ftruncate(fd, sizeof(sem_t));
sem = (sem_t*) mmap(0, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
当我使用指针时,我也无法读取信号量的值,我什至不知道是否可以..
我可以在子进程也可以访问的共享内存区域中创建一个没有 sem_t 指针的未命名信号量吗?
问题是您正在调用 sem_init
,而 sem
仍然没有特别指向任何地方。将该调用指向 mmap
的结果后(即,指向您发布的代码段的底部)。
我知道未命名信号量应该在共享内存区,但我不知道如何实现,因为 mmap() returns 指向映射区域的指针,我不得不使用 sem_t 指针,但这一次,我认为它不太安全。这是我所做的,
sem_t *sem;
char* name = "sharedSem";
int fd;
sem_init(sem, 1, 1);
fd = shm_open(name, O_CREAT | O_RDWR, 0666);
if(fd == -1)
{
perror("fail");
exit(-1);
}
ftruncate(fd, sizeof(sem_t));
sem = (sem_t*) mmap(0, sizeof(sem_t), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
当我使用指针时,我也无法读取信号量的值,我什至不知道是否可以..
我可以在子进程也可以访问的共享内存区域中创建一个没有 sem_t 指针的未命名信号量吗?
问题是您正在调用 sem_init
,而 sem
仍然没有特别指向任何地方。将该调用指向 mmap
的结果后(即,指向您发布的代码段的底部)。