【进程间通信】共享内存、消息队列

共享内存

ipcs 查看进程间通信的信号量 共享内存 消息队列 的使用情况

ipcrm 删除

共享内存的使用需要信号量同步

同步?

对临界资源的访问有控制,能保证同一时刻只有一个进程访问,则这两个进程是同步。

在不同地方,意义不同。 1.进程线程同步2.通信方式

同步和异步的方式?

同步:严格按照代码顺序执行,如果遇到需要等待的事件就阻塞等待

异步:不一定按照代码的顺序执行,有可能跳过一段代码执行,也有可能随时执行其他地方的代码。(打电话)

阻塞和非阻塞?

消息队列 

1.msgget函数:该函数用来创建和访问一个消息队列。它的原型为:

int msgget(key_t key, int msgflg);

2.msgsend函数:该函数用来把消息添加到消息队列中。它的原型为:

int msgsend(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg);

3.msgrcv函数:该函数用来从一个消息队列获取消息,它的原型为

int msgrcv(int msgid, void *msg_ptr, size_t msg_st, long int msgtype, int msgflg);

4.msgctl函数:该函数用来控制消息队列,它与共享内存的shmctl函数相似,它的原型为:

int msgctl(int msgid, int command, struct msgid_ds *buf);

 

整个消息队列有两种类型的数据结构:

1、msqid_ds消息队列数据结构:描述整个消息队列的属性,主要包括整个消息队列的权限,拥有者、两个重要的指针分别指向消息队列的第一个消息和最后一个消息。

2、msg消息数据结构:整个消息队列的主体,一个消息队列有若干个消息,每个消息数据结构的基本成员包括消息类型、消息大小、消息内容指针和下一个消息数据结构位置。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值