C++建立两个内存缓冲区 通过多线程共享内存进行读写 10

一个request缓冲区,一个receive缓冲区,最多64个线程,每个线程写入一个固定格式为32位的数据。线程先准备将数据存入req,如果没有就插入,有就删除,并将后面... 一个request缓冲区,一个receive缓冲区,最多64个线程,每个线程写入一个固定格式为32位的数据。线程先准备将数据存入req,如果没有就插入,有就删除,并将后面的数据指针各减1,然后将req的数据复制到rec区,如果已经有了就不插入。
求各位大神解答,就这么点分,全给你们。
是window系统下的。
展开
 我来答
百度网友96ffcf7
2015-04-03 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118726
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部
一旦shmget创建成功了,或者attach成功了。调用shmget会给你返回一个地址的,然后通过引用这个指针直接读取数据。和其它的应用一样。

例如

#define PERM S_IRUSR|S_IWUSR

int main(int argc,char **argv)

{

int shmid;

char *p_addr,*c_addr;

if(argc!=2)

{

fprintf(stderr,"Usage:%s\n\a",argv[0]);

exit(1);

}

if((shmid=shmget(IPC_PRIVATE,1024,PERM))==-1)

{

fprintf(stderr,"Create Share Memory Error:%s\n\a",strerror(errno));

exit(1);

}

if(fork())

{

p_addr=shmat(shmid,0,0);

memset(p_addr,'\0',1024);

strncpy(p_addr,argv[1],1024);

exit(0);

}

else

{

c_addr=shmat(shmid,0,0);

printf("Client get %s",c_addr);

exit(0);

}

}
复制代码
追问
不对的,这是linux下的,而且不是多线程。
pieryon
推荐于2016-02-05 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166870
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
共享内存:实现进程间通信的一种方式。希望访问该内存块的其他进程必须请求对它的访问,或由创建它的进程授予访问内存块的权限。共享内存被映射到使用它的每个进程的地址空间。当一个进程写共享内存,所有进程都立即知道写入的内容,并且可以访问。相当于函数间全局变量的关系类似。进程可能共享一个逻辑地址,也可以共享某些物理地址。
通常使用共享内存比使用管道或队列更简单更有效。共享内存块可用于保存大数据结构。可用于映射文件到内存,使得应用程序减轻了常规文件访问的I/O操作代价。
WIN32 环境创建和使用共享内存所需API:
CreateFileMapping() 创建一个文件映射对象,对文件无限制。
OpenFileMapping() 获取映射对象的句柄
MapViewOfFile() 获取共享内存的起始地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式