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

时间:2017-03-24 04:24:01

标签: c++ fork 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");
  • 使用shmid1,我存储一个整数。
  • 使用shmid2我存储一个整数数组。
  • 使用shmid3我存储了一个char *数组。 (字符串)

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

1 个答案:

答案 0 :(得分:2)

共享内存将附加到内核中的特定内存指针。 因此,您创建共享内存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;

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

感谢。