如何在共享内存中初始化未命名的semaphore?

问题描述 投票:1回答:1

我知道未命名的semaphores应该在共享内存区域,但我不知道如何实现,因为mmap()返回一个指向映射区域的指针,我必须使用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);

当我使用指针时,我也不能读取semaphore的值,我甚至不知道这是否可能。

我可以在共享内存区域创建一个没有sem_t指针的无名旗语,让子进程也可以访问吗?

c linux fork semaphore shared-memory
1个回答
1
投票

问题是你在调用 sem_initsem 仍然没有指向任何特定的地方。把这个调用移到你把它指向了 mmap (即到你发布的片段底部)。

© www.soinside.com 2019 - 2024. All rights reserved.