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

Storing many variables in shared memory

本文关键字:许多 变量 存储 共享 内存      更新时间:2023-10-16

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

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 我存储了一个字符*数组。(字符串(

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

共享内存将附加到内核中的特定内存指针。因此,您创建共享内存 ID 的方式是正确的。

基本的共享内存操作包括:

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

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

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

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

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

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

现在假设您要将数组存储在共享内存变量中。然后

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

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

谢谢。