linux网络编程之进程间通信基础(一) 进程间通信概述

一、顺序程序与并发程序特征

顺序程序特征

顺序性

封闭性:(运行环境的封闭性)

确定性

可再现性

并发程序特征

共享性

并发性

随机性

二、进程互斥

1、由于各进程要求共享资源,而且有些资源需要互斥使用,因 此各进程间竞争使用这些资源,进程的这种关系为进程的互斥

2、系统中某些资源一次只允许一个进程使用,称这样的资 源为临界资源或互斥资源。

3、在进程中涉及到互斥资源的程序段叫临界区

举例如下图:

假设x = 1; 当A进程已经判断完毕x>0,此时时间片轮转到了B,B也判断x>0,然后执行x--,即x=0,然后过后又 轮转到继续执行A,此时再执行x-- 就明显系统逻辑出现了错误。

三、进程同步

进程同步指的是多个进程需 要相互配合共同完成一项任务。举例如下图:

P1和P2进程是互相配合的,只有当P2关门后 ,P1才能启动车辆;P1正常运行了,P2开始售票;当P1到站停车后,P2才能开门;

即需要互相等待对方完成某个操 作,自身才能继续运行下去。

四、进程间通信的目的

1、数据传输:一个进程需要将它的数据发送给另一个 进程

2、资源共享:多个进程之间共享同样的资源。

3、通知事件:一个进程需要向另一个或一组进程发送消息,通知 它(它们)发生了某种事件(如进程终止时要通知父进程)。

4、进程控制:有些进程希望完全控制另一个进程的执行( 如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。

时间: 2024-10-26 05:47:52

linux网络编程之进程间通信基础(一) 进程间通信概述的相关文章

Linux网络编程入门

(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端          网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端         在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一         个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序.  服务端        

处理Linux网络编程中的IP地址

 Linux网络服务能力非常强大,它的TCP/IP代码是最高级的.Linux的网络实现是模仿FreeBSD的,它支持FreeBSD的带有扩展的Sockets(套接字)和TCP/IP协议.它支持两个主机间的网络连接和Sockets通讯模型,实现了两种类型的Sockets:BSD Sockets和INET Sockets.它为不同的通信模型和服务质量提供了两种传输协议,即不可靠的.基于消息的UDP传输协议和可靠的.基于流的传输协议TCP,并且都是在IP网络协议上实现的.INET sockets是在以

Linux网络编程一步一步学【转】

转自:http://blog.chinaunix.net/uid-10747583-id-297982.html Linux网络编程一步一步学+基础  原文地址:http://blogold.chinaunix.net/u1/48325/showart_413841.html ·Linux网络编程基础(一)·Linux网络编程基础(二)·Linux网络编程基础(三) • Linux网络编程一步一步学-简单客户端编写   • Linux网络编程一步一步学-绑定IP和端口 • Linux网络编程一步

Proxy源代码分析--谈谈如何学习linux网络编程

原创地址: http://fanqiang.chinaunix.net/a4/b7/20010810/1200001101.html   Linux是一个可靠性非常高的操作系统,但是所有用过Linux的朋友都会感觉到,Linux和Windows这样的"傻瓜"操作系统(这里丝毫没有贬低Windows的意思,相反这应该是Windows的优点)相比,后者无疑在易操作性上更胜一筹.但是为什么又有那么多的爱好者钟情于Linux呢,当然自由是最吸引人的一点,另外Linux强大的功能也是一个非常重要

linux网络编程libpcap获取网络接口信息失败

问题描述 linux网络编程libpcap获取网络接口信息失败 #include typedef u_int32_t in_addr_t; struct in_addr{ in_addr_t s_addr;}; void main(){ char error_content[PCAP_ERRBUF_SIZE]; struct in_addr net_ip_address; struct in_addr net_mask_address; char *net_interface; char *ne

Linux网络编程 epoll中EPOLLIN EPOLLOUT信号无法触发

问题描述 Linux网络编程 epoll中EPOLLIN EPOLLOUT信号无法触发 比如 if(events[i].events&EPOLLIN) { int bytes_read=read(m_sockfd,read_buf,READ_BUFFER_SIZE); } 这样会触发EPOLLIN 但如果把read()封装到比如service类的sread()函数中 if(events[i].events&EPOLLIN) { service.sread() } 便不会触发EPOLLIN事

Linux 网络编程 epoll中的EPOLLIN EPOLLOUT如何触发

问题描述 Linux 网络编程 epoll中的EPOLLIN EPOLLOUT如何触发 代码很长只截取关键部分 //服务器端 #include #include #include #include #include #include #include #include #include #include"locker.h" #include"threadpool.h" #include"http_conn.h" #include"htt

Linux 网络编程 之 TCP状态转换

                                               Linux 网络编程 之 TCP状态装换                                                                       从上面的图中可以看出,TCP共有11状态.由TCP发送和接收的数据有:ACK, FIN, SYN,RST.对于一个还未调用connect的client和未调用listen的server来说,它们都处于CLOSED状态.ACK

Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR

                       Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR Linux网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR.   SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回.

socket-刚学linux网络编程,有个问题,listen( )函数可以用来监听其他电脑的端口吗?

问题描述 刚学linux网络编程,有个问题,listen( )函数可以用来监听其他电脑的端口吗? 如果可以是不是可以用这样的流程,先socket()创建描述符, 然后再bind()绑定一个IP地址跟端口? 解决方案 实在是没看懂你的需求 解决方案二: listen是侦听本机的端口,只有服务器端才需要这么做,你想监听其他主机,就需要在局域网路由器等上面做流量监控 解决方案三: 可以,基于socket的编程,只要绑定对IP地址就可以了.