C中同一共享内存块的不同部分的信号量
Semaphores for different parts of the same shared memory block in C
我对如何为我的程序设置共享内存段有疑问。
在我的程序中,我想要一个包含 50 个不同帐户的主结构。
看起来像这样的东西。
struct list{
struct account[50];
};
每个帐户中只有一些基本信息
struct account{
int x;
char * y;
};
现在,我希望我的整个列表位于共享内存段中,因为我的主进程的不同子进程将更新列表中的不同帐户。
但是,我只希望子进程能够访问此列表中的某个帐户。我将如何设置一个可以被不同部分的子进程锁定的共享内存段?例如,我想要一个信号量,它可以锁定对共享内存段中 account[32] 的访问。这意味着另一个进程可以同时更新共享内存段中的 account[29] 而没有问题。
我并不是真的在寻找具体的代码示例(尽管这些会有所帮助),但更多的是从概念上理解为该程序设置共享内存的最佳方式。
谢谢。
如果我理解这是关于什么的,我会看到两种选择:
第一个是修改struct account
,所以多了一个字段,一个信号量。任何进程在访问其他帐户的字段之前都应该在信号量上 P()
,并且在完成时 V()
。
第二个是修改struct list
,添加一个额外的信号量数组,与帐户数组大小相同,为数组中的每个信号量分配相同索引的帐户,并使用P()
和 V()
再次访问相应帐户之前和之后。
我对如何为我的程序设置共享内存段有疑问。
在我的程序中,我想要一个包含 50 个不同帐户的主结构。 看起来像这样的东西。
struct list{
struct account[50];
};
每个帐户中只有一些基本信息
struct account{
int x;
char * y;
};
现在,我希望我的整个列表位于共享内存段中,因为我的主进程的不同子进程将更新列表中的不同帐户。
但是,我只希望子进程能够访问此列表中的某个帐户。我将如何设置一个可以被不同部分的子进程锁定的共享内存段?例如,我想要一个信号量,它可以锁定对共享内存段中 account[32] 的访问。这意味着另一个进程可以同时更新共享内存段中的 account[29] 而没有问题。
我并不是真的在寻找具体的代码示例(尽管这些会有所帮助),但更多的是从概念上理解为该程序设置共享内存的最佳方式。
谢谢。
如果我理解这是关于什么的,我会看到两种选择:
第一个是修改struct account
,所以多了一个字段,一个信号量。任何进程在访问其他帐户的字段之前都应该在信号量上 P()
,并且在完成时 V()
。
第二个是修改struct list
,添加一个额外的信号量数组,与帐户数组大小相同,为数组中的每个信号量分配相同索引的帐户,并使用P()
和 V()
再次访问相应帐户之前和之后。