【发布时间】:2013-02-08 17:22:53
【问题描述】:
我正在尝试设置共享内存的 s 段来保存字符串数组。以这个数组为例
string example[] = {"This is", "An Example", "of strings"};
然后我尝试调用 shmget 以便我可以保留适当数量的操作系统共享内存。
shmget(IPC_PRIVATE, sizeOf(example), IPC_CREAT);//我希望这会创建共享内存段
我发现了这个site,上面写着“关键参数是与信号量 ID 相关联的访问值”什么信号量 ID 以及如何创建它。
这使用 g++ -Wall 编译,但我不知道如何检查它是否有。根据 IPC_PRIVATE 所在的 linux 中的 shm 手册,我应该指定“key_t”类型的内容。我的想法是我如何识别共享内存的关键,即指定一个字符串作为共享内存名称,或者指定一个字符串作为 ID 号。
通过阅读手册指出 shmget() 返回一个“shmid”。同样,虽然什么是 shmid,它是 int、string、pointer 还是某种特殊类型,这就是我识别共享内存段的方式吗?另外,如果 shmget() 正在返回某些东西,我不需要将其分配给某些东西吗?
如果您能推荐一个教程或概述,我将不胜感激。除了上面的具体问题,我想要一个从 fork() 命令创建的线程访问共享内存的示例。
我的最终目标是为我的数组中的每个字符串生成一个线程,该线程将执行某种反转。这只是开始使用共享内存和 pthreads 的一个小任务,因为我还没有找到可以完成的教程。
【问题讨论】:
-
shmget()返回一个int(kernel.org/doc/man-pages/online/pages/man2/shmget.2.html)。所以shmid将是一个整数。
标签: c++ pthreads fork shared-memory