在共享内存中存储许多变量
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 我存储了一个字符*数组。(字符串(
有没有更好的方法来解决这个问题?
共享内存将附加到内核中的特定内存指针。因此,您创建共享内存 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;
现在,共享内存将包含数组变量。您可以使用相同的共享内存密钥读取它。
谢谢。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为许多类可能需要的所有常量变量制作独立的头文件是否是一种很好的做法?
- 许多变量,没有嵌套循环的最佳方法
- 在共享内存中存储许多变量
- 提高可读性和可维护性:省略许多变量声明的< >可能吗?
- 许多读取/一条在原子变量中写入
- 具有许多成员变量的课程的最佳实践
- 我应该将许多函数中使用的变量声明为成员变量吗
- 比较C++中的许多char变量
- 如何使具有许多全局变量的旧C代码库可重入
- 在 c++ 类中编写许多 void 方法,并跟踪变量更改
- 将许多变量从一个类中的函数传递到另一个类的函数
- 如何在c++中初始化许多局部变量
- Pthread用于许多类变量
- 在初始化列表中初始化许多对象成员变量
- 用于许多变量的DataExchange
- 如何将输入变量传递给基于用户输入在许多地方调用的C++类方法
- 一个结构体的深度拷贝,它嵌入了许多简单的变量和一个嵌套结构体