信号量用于C中相同共享内存块的不同部分

时间:2015-04-17 17:23:21

标签: c memory multiprocessing semaphore shared-memory

我有一个关于如何为我的程序设置共享内存段的问题。

在我的程序中,我想要一个包含50个不同帐户的主结构。 看起来像这样的东西。

struct list{
   struct account[50];
};

在每个帐户中只有一些基本信息

struct account{
   int x;
   char * y;
};

现在,我希望我的整个列表位于共享内存段中,因为我的主进程的不同子进程将更新列表中的不同帐户。

但是,我只希望子进程能够访问此列表中的某个帐户。我将如何设置一个可以被子进程在不同部分锁定的共享内存段?例如,我想要一个能够锁定共享内存段中帐户[32]访问权限的信号量。这意味着另一个进程可能同时更新共享内存段中的帐户[29]而没有任何问题。

我并不是在寻找具体的代码示例(尽管这些代码会有所帮助),但更多的是概念性地理解为此程序设置共享内存的最佳方法。

感谢。

1 个答案:

答案 0 :(得分:1)

如果我明白这是什么,我会看到两种选择:

第一个是修改struct account,因此有一个额外的字段,一个信号量。在信号量访问其他帐户的字段之前,任何流程都应该P(),并且V()当它完成后。{/ p>

第二个是修改struct list,添加额外的信号量数组,与帐户数组大小相同,使用相同索引的帐户分配数组中的每个信号量,并使用P()在访问相应帐户之前和之后再次使用V()