进程间通信

1,进程间通信的目的:
数据传输,
资源共享,
通知时间,
进程控制:有些进程希望完全控制另一个进程的执行,控制进程希望能够拦截另一个进程所有的陷入和异常,并能够及时知道他的状态。
2,进程间通信的方式
管道:
匿名管道:只能用于具有亲缘关系的进程之间进行通信。(父子进程),管道的什么周期随进程,半双工机制,双端通信需要建立就两个管道,
创建:使用pipe函数创建,
注意:管道写端关闭,读端读完管道数据后返回0;
如果写端没有关闭,并且管道为空后,读端就会阻塞,知道有数据可以读才会返回。
如果读端关闭,写端继续写,进程就会收到SIGPIPE信号,并且异常终止。
如果管道被写满,那么写端就会阻塞
命名管道:能够实现任意两个进程间的通信,以FIFO文件的形式存在于文件系统中。
创建:命令行使用mkfifo或者函数调用mkfifo函数
消息队列:
特点:消息队列提供了一个进程向另一个进程发送一块数据的方法。每个消息的最大长度有上限,消息队列的长度也有上限,系统中消息队列的总数也有上限。
创建:msgget()函数,控制:msgctl函数,msgsnd()向消息队列中添加函数,msgrcv()函数,从一个消息队列接收消息。
共享内存:允许多个进程共享一定的存储区
特点:最快的进程间通信的方式,一个进程改变了共享内存中的数据后,其他的进程能立即察觉到改变。不需要将数据从内核拷贝到用户空间,所以快。
注意:共享内存没有任何的同步与互斥机制,需使用信号量实现同步互斥。
1.
创建:shmget()控制:shmctl() 挂接:shmat()分离:shmdt()

信号量:主要用于同步和互斥
        互斥:各进程间竞争使用共享资源,这种竞争关系为互斥。
        临界资源:一次只允许一个进程使用
        临界区:具有互斥资源的程序段。
        同步:多个进程相互配合完成一项任务
        信号量:处理同步互斥问题引入,s>0表示可用资源的个数,s==0表示无可用资源并且无进程等待,s<0 |s|表示等待队列中进程的个数。pv操作
        信号量集:多个信号量共同决定一个任务的执行
        结构:
                标志组和等待任务链表,等待任务链表中每个节点对应一个等待任务控制块
                标志组:存放了信号量集的所有信号,是一个位图的结构
互斥量
条件变量
读写锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值