当前位置: 技术问答>linux和unix
请教:多进程共享内存问题
来源: 互联网 发布时间:2017-04-22
本文导语: 父进程创建了32个子进程,父进程负责向共享内存写数据,每个子进程都需要读取该共享内存里的数据并发送,问题是,如何实现 当所有子进程都读过该数据后,删除此数据。(不能一次性全删除,因为父进程会不...
父进程创建了32个子进程,父进程负责向共享内存写数据,每个子进程都需要读取该共享内存里的数据并发送,问题是,如何实现 当所有子进程都读过该数据后,删除此数据。(不能一次性全删除,因为父进程会不停地写数据,子进程不停地读数据,发数据。每一份数据只需要每个子进程读一遍,所有子进程都读完后,删除。)
下面是父进程创建共享内存的代码。
下面是父进程创建共享内存的代码。
struct DATA_INFO
{
int iDataLen;
BYTE btData[1024];
};
vector *pSendBufVector;
int shmid=shmget(IPCKEY,39452672,0640|IPC_CREAT|IPC_EXCL);
if(shmid==-1)
{
printf("shmget errorn");
return -1;
}
else
{
printf("shmget okn");
}
//将这块共享内存区附加到自己的内存段
pSendBufVector = (vector *)shmat(shmid,NULL,0);
|
做成环形队列, 使用进程共享锁+条件变量 或者 使用信号量.
|
每份数据设置一个计数值,子进程读完数据就给它+1或者位操作,父进程判断所有子进程都读完就删除数据
|
不是很明白你说的
假如共享内存存放多份数据。子进程下次读取的位置应该和父进程协议好,比如每次偏移多少,或者在上一份数据里面直接有下一份数据的地址信息