繁体   English   中英

如何使用共享 memory 初始化未命名的信号量?

[英]how to initiliaze unnamed semaphore with shared memory?

我知道未命名的信号量应该在共享 memory 区域,但我不知道如何实现,因为 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);

当我使用指针时,我也无法读取信号量的值,我什至不知道是否有可能..

我可以在子进程也可以访问的共享 memory 区域中创建一个没有 sem_t 指针的未命名信号量吗?

问题是您正在调用sem_initsem仍然没有特别指向任何地方。 将该调用指向mmap的结果后(即,指向您发布的代码段的底部)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM