Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在共享内存中存储许多变量_C++_Fork_Shared Memory - Fatal编程技术网

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

C++ 在共享内存中存储许多变量,c++,fork,shared-memory,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(k

我正在研究多线程和共享内存,只是想知道设置共享内存的最佳方法是什么。到目前为止,我已经完成了这项工作,所有的键都不同:

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;
现在,共享内存将包含数组变量。您可以使用相同的共享内存键读取它


谢谢。

共享内存将附加到内核中的特定内存指针。 因此,您创建共享内存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;
现在,共享内存将包含数组变量。您可以使用相同的共享内存键读取它

谢谢