进程间的通信方式

进程间的通信方式有哪些?深入理解

  1. 管道:支持半双工通信,数据单向流动,只能用于父子进程和兄弟进程。
  2. 命名管道 FIFO:也具有管道的性质,但它允许无亲缘关系的进程进行通信。
  3. 消息队列:它是消息的链表,存放在内核中并由消息队列标识符标识。
  4. 信号量:它是一个计数器,用来控制多个进程对共享资源的访问。
  5. 共享内存:多个进程共享同一资源,数据不需要在进程之间复制,所以是最快的通信方式。(一般和信号量结合使用)
  6. TCP/IP 套接字的方式(socket) :用于不同机器间的进程通信。这种方式在 TCP/IP 连接上建立一个基于网络的连接请求,不同机器通过 TCP/IP 网络进行连接和通信。

一. 信号量

  • 信号量是一个计数器,用来实现进程之间的互斥和同步。它用一个整型变量来累积唤醒操作的次数,取值为0时表示没有保存的唤醒操作,取值为正数时表示有一个或多个唤醒操作。

  • 设立有两种操作,down 和 up。对一个信号量执行 down 操作时,会先检查信号量的值,如果大于0,就将它减一,表示用掉了一个唤醒信号;如果信号量的值为0,那么进程就进入睡眠状态,此时 down 操作并未结束。这里检查信号量的值、修改这个值以及睡眠操作都为原子操作,不可分割,这样可以保证一个信号量操作开始时,其他进程不能访问这个信号量。

  • up 操作是对信号量的值加一。当对一个有进程在上面睡眠的信号量执行一次 up 操作时,该信号量的值仍然为0,但会唤醒一个睡眠的进程。如果没有进程在此信号量上睡眠,就将信号量的值成功加一。这里唤醒一个进程和信号量的值加一,都是原子操作,不可分割。

  • 下面为信号量的了解内容:

  • 如果在同一个进程中执行 down 和 up 操作,可以实现进程之间的互斥;如果在不同进程之间执行 down 和 up 操作,可以实现进程之间的同步。

  • 信号量实现同步的原理是,进程获取临界资源前,要先获取信号量的资源,如果信号量值为0,该进程就阻塞等待,进入等待队列,如果信号量值为正数,就对信号量进行减一操作,并让进程获取临界资源。临界资源指的是一次只允许一个进程访问的资源。

  • 信号量实现互斥的原理是,一个进程获取了某个临界资源后,其它进程就无法再访问该临界资源了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值