在共享内存中存储许多变量

Storing many variables in shared memory

我正在处理多线程和共享内存,只是想知道设置共享内存的最佳方法是什么。到目前为止,我已经这样做了,所有的键都不一样:

if ((shmid1 = shmget(key1, 1024, IPC_CREAT)) == -1)
    error("ERROR on shmget1");

if ((shmid2 = shmget(key2, 1024, IPC_CREAT)) == -1)
    error("ERROR on shmget2");

if ((shmid3 = shmget(key3, 1024, IPC_CREAT)) == -1)
    error("ERROR on shmget3");

有没有更好的方法来解决这个问题?

共享内存将附加到内核中的特定内存指针。 所以你创建共享内存id的方式是正确的。

基本的共享内存操作是,

shmget - 创建共享内存 shmat - 在内核中创建内存区域并分配给变量 shmctl - 共享内存控制操作 shmdt - 从内核中分离内存

您已经使用 shmget 创建了共享内存 ID。

现在,您必须创建内存并将其附加到变量。无论值是多少,

void *shmat(int shmid, const void *shmaddr, int shmflg);

您可以将任何变量赋给指针。

例如,void *var = shmat(shmid, NULL, shmflg);

现在假设您要将数组存储在共享内存变量中。那么,

int a[] = { 1, 2, 3};
var = a;

现在共享内存将包含数组变量。您可以使用相同的共享内存密钥读取它。

谢谢。