如何使用shmat将多个信号量附加到共享内存?

时间:2016-10-16 14:42:49

标签: c++ posix semaphore shared-memory

在共享内存中,可以使用连接到它的指针将数据写入其中的任何位置 例如,如果 id 是共享内存id(大小为1024B)并且附加了char *类型,则如下所示

char* CharPointertoSm;
CharPointertoSm=(char*)shmat(id, 0, 0);

然后可以使用指针 CharPointertoSm 在共享内存上的任何位置读取或写入数据 比如,在索引10上写,我们

CharPointertoSm[10]='a';

我的问题是我们如何使用相同的方案将多个信号量附加到共享内存?要附加一个信号量,我们

sem_t * semDecide = NULL;
if ((semDecide = (sem_t *)shmat(id, 0, 0)) == (sem_t *) -1) 
{
        printf("shmat-sem\r\n");
        shmctl(id,IPC_RMID, 0);            
        exit(1);
}

并且此信号量(semDecide)将占用共享内存的前32个字节,我们如何将下一个32位分配给另一个信号量?因为使用与上面相同的另一个信号量作为

sem_t * semDecide2 = NULL;
if ((semDecide2 = (sem_t *)shmat(id, 0, 0)) == (sem_t *) -1) 
{
        printf("shmat-sem\r\n");
        shmctl(id,IPC_RMID, 0);            
        exit(1);
}

不起作用(可能因为它再次使用前32个字节,之前已分配给第一个信号量(i-e到semDecide)
如何使用shmat将第二个信号量附加到第一个信号量旁边?

0 个答案:

没有答案