请教:多进程共享内存问题

Joan201401 2013-08-21 03:53:56
父进程创建了32个子进程,父进程负责向共享内存写数据,每个子进程都需要读取该共享内存里的数据并发送,问题是,如何实现 当所有子进程都读过该数据后,删除此数据。(不能一次性全删除,因为父进程会不停地写数据,子进程不停地读数据,发数据。每一份数据只需要每个子进程读一遍,所有子进程都读完后,删除。)
下面是父进程创建共享内存的代码。
	 
struct DATA_INFO
{
int iDataLen;
BYTE btData[1024];
};
vector<DATA_INFO> *pSendBufVector;
int shmid=shmget(IPCKEY,39452672,0640|IPC_CREAT|IPC_EXCL);
if(shmid==-1)
{
printf("shmget error\n");
return -1;
}
else
{
printf("shmget ok\n");
}
//将这块共享内存区附加到自己的内存段
pSendBufVector = (vector<DATA_INFO> *)shmat(shmid,NULL,0);
...全文
453 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joan201401 2013-08-26
  • 打赏
  • 举报
回复
up,木有人知道啊
Joan201401 2013-08-22
  • 打赏
  • 举报
回复
父进程写数据,32个子进程读数据,数据量挺多的,需要不停地读写。 有谁知道,这种情况适合用共享内存不?
qq120848369 2013-08-21
  • 打赏
  • 举报
回复
做成环形队列, 使用进程共享锁+条件变量 或者 使用信号量.
qiyu1988 2013-08-21
  • 打赏
  • 举报
回复
引用 2 楼 LIFECANNOTBEQUIET 的回复:
嗯,多些楼上的回复。这样可以判断是否子进程都读过了,但是麻烦的是pSendBufVector,一边主进程在删除前面的数据,一边别的子进程再向后读取数据。子进程读取数据时,并不知道前面的数据已经被删除了,地址应该跟着变。 可以建32个共享内存不,分别给每个子进程一份独立的数据,这样会不会好处理些?
不是很明白你说的 假如共享内存存放多份数据。子进程下次读取的位置应该和父进程协议好,比如每次偏移多少,或者在上一份数据里面直接有下一份数据的地址信息
Joan201401 2013-08-21
  • 打赏
  • 举报
回复
嗯,多些楼上的回复。这样可以判断是否子进程都读过了,但是麻烦的是pSendBufVector,一边主进程在删除前面的数据,一边别的子进程再向后读取数据。子进程读取数据时,并不知道前面的数据已经被删除了,地址应该跟着变。 可以建32个共享内存不,分别给每个子进程一份独立的数据,这样会不会好处理些?
qiyu1988 2013-08-21
  • 打赏
  • 举报
回复
每份数据设置一个计数值,子进程读完数据就给它+1或者位操作,父进程判断所有子进程都读完就删除数据

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧