打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
linux中进程间通信与同步
1.管道中还有命名管道和非命名管道之分,非命名管道只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式
2.消息队列是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中取数据。需要注意的是,消息队列是用创建文件的方式建立的,如果一个进程向某个消息队列中写入了数据之后,另一个进程并没有取出数据,即使向消息队列中写数据的进程已经结束,保存在消息队列中的数据并没有消失,也就是说下次再从这个消息队列读数据的时候,就是上次的数据!!!!
3.信号量,它与WINDOWS下的信号量是一样的,所以就不用多说了
4.共享内存,类似于WINDOWS下的DLL中的共享变量,但LINUX下的共享内存区不需要像DLL这样的东西,只要首先创建一个共享内存区,其它进程按照一定的步骤就能访问到这个共享内存区中的数据,当然可读可写
几种方式的比较:
1.管道:速度慢,容量有限,只有父子进程能通讯
2.FIFO:任何进程间都能通讯,但速度慢
3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
4.信号量:不能传递复杂消息,只能用来同步
5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了一块内存的
从理论上来讲,同步也是通信的一个子集,它是一种不传递实际数据的通信,也就是告诉对方,现在还不能用某个变量等,或者通知对方现在可以用了
从实现方式来讲,的确,同步和通信不是一回事儿,用于进程间的信号量就是用来同步的,而不能进行数据通信,共享内存区既是一种通信手段,但同时也需要同步与互斥,也就是说要保护共享内存区。
linux内核提供了两种机制进行互斥访问:锁与信号量。
1. 自旋锁
自旋锁禁止抢占,但本身可能导致无限延期、甚至死锁,通常通过抢占锁计数器进行控制。
2. 阅读程序/写程序锁
阅读锁可以被多重持有,写入锁只能被一个程序持有。
3. 顺序锁
有写入程序在等待时,拒绝新的读取程序进入。内核信号量计数的信号量, 由等待队列与计数器表示。
进程间通信
1. 信号
不支持进程间交换多于一个字的数据;
进程或者线程以三种方式中的一种处理信号,这三种方式分别是:
忽略信号;
捕捉信号;
执行内核为信号定义的默认动作,包括放弃、执行内存转储、简单忽略信号、停止和继续。
2. 管道
利用生产者消费者模型进行通信。
3. 套接字
主要类型包括:
流套接字,以字节流传输信息;
数据文报套接字,在数据文报的独立单元中传输信息。
4. 消息队列
5. 共享内存
6. System V信号量
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux进程间通信简介
Linux的进程通信(IPC)
进程、线程间通信
Linux进程间通信的各种方式及其比较
深刻理解Linux进程间通信(IPC)
Linux的进程/线程通信方式总结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服