簡體   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