在共享内存中存储许多变量
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");
- 我用 shmid1 存储一个整数。
- 我使用 shmid2 存储一个整数数组。
- 我使用 shmid3 存储一个 char* 数组。 (字符串)
有没有更好的方法来解决这个问题?
共享内存将附加到内核中的特定内存指针。
所以你创建共享内存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;
现在共享内存将包含数组变量。您可以使用相同的共享内存密钥读取它。
谢谢。
我正在处理多线程和共享内存,只是想知道设置共享内存的最佳方法是什么。到目前为止,我已经这样做了,所有的键都不一样:
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* 数组。 (字符串)
有没有更好的方法来解决这个问题?
共享内存将附加到内核中的特定内存指针。 所以你创建共享内存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;
现在共享内存将包含数组变量。您可以使用相同的共享内存密钥读取它。
谢谢。