我正在使用多线程和共享内存,只是想知道设置共享内存的最佳方法是什么。到目前为止,我已经完成了这一切,所有的键都不同:
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");
有没有更好的方法来解决这个问题?
答案 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;
现在共享内存将包含数组变量。您可以使用相同的共享内存密钥来读取它。
感谢。