进程/线程同步互斥与通信及socket传输

4 篇文章 0 订阅
2 篇文章 0 订阅

在这里结合做过的一些项目对进程的同步互斥与通信问题及socket传输进行总结。


之前做过的一个项目,需要获取图像资源来进行算法处理,当然这个问题不是在进程间,而是在线程之间的通信。

情况:从回调函数获取图像数据,但是算法处理速度未知,有可能慢有可能快,所以不适合在回调函数内部直接进行处理。

解决方案:开辟一片buffer空间,被生产者和消费者循环使用。Buffer区相当于一个固定大小的队列,当存满的时候自动丢弃最先入队的资源。消费者和生产者互斥使用buffer资源,使用临界区同步对象CriticalSection。属于共享存储区的通信方式。

由于我们算法得到的结果需要在另一台机器上进行展示,这就需要网络方面的传输,通过 socket进行这方面的传输。


1、进程同步互斥方法:

•软件方法:

很难正确控制进程间的同步与互斥,而且可能会大大地增加系统的额外开销

•硬件方法
屏蔽中断:进程进入临界区之前,屏蔽中断,当进程退出临界区时,打开系统中断。
专用机器指令

•信号量方法:含有两个原子操作
阻塞、插入队列,唤醒
类型:互斥信号量和资源信号量

•管程方法:

信号量机制功能强大,但使用时对信号量的操作分散,读写和维护都很困难。一种集中式同步进程——管程,其基本思想是将共享变量和对它们的操作集中在一个模块中,操作系统或并发程序就由这样的模块构成。这样模块之间联系清晰,便于维护和修改,易于保证正确性。一个管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。
从语言的角度看,管程主要有以下特性
(1)模块化。
(2)抽象数据类型。管程是中不仅有数据,而且有对数据的操作;
(3)信息掩蔽。管程外可以调用管程内部定义的一些函数,但函数的具体实现外部不可见;

•消息传递方法


2、进程通信的方式

进程之间的通信内容包含两种类型:控制信息与大批量数据。

•低级通信:进程之间交换控制信息的过程
•高级通信:进程之间交换批量数据的过程

进程之间同步与互斥是一种低级通信,用来控制进程执行速度。在项目中,临界区对象是低级通信,而进入临界区之后共享的存储区则是高级通信


3、进程通信机制

• 基于共享存储区方式:本地通信
• 消息传递方式:含有消息头(消息类型、目的端地址、远端地址、消息长度、控制信息)和消息体(消息内容)。
• 邮箱机制、管道、信号量等


4、socket通信

属于通信机制中消息传递方式

套接字连接位于客户端和服务器端。服务器端服务器进程要用socket()系统调用创建一个套接字(服务器套接字),该套接字不可与其他进程共享。然后服务器需要初始化套接字,与端口绑定(bind)、对端口进行监听(listen)、调用accept(进行阻塞)、等待客户连接。这时如果客户端有初始化一个socket,建立与服务器的连接(connect),若连接成功,客户端与服务器端就连接成功。客户端发送数据请求,服务器端接收请求并处理,再把回应数据发送给客户端,客户端读取数据,最后关闭连接,结束交互。客户端需要服务器的地址和要发送的数据,服务器端需要启动socket和监听等。


5、同步互斥与通信的区别

其实同步互斥与通信有很多重合的地方,但是从概念意义上来理解这两部分是不一样的。

同步互斥:偏向于从资源的竞争协作方面来理解,以保证对资源的正确控制为主,也就是说为了实现同步互斥顺便把通信的事儿也做了(从交集部分)。

通信:偏向于从资源之间的交互方面来看待的,以通信双方的主体操作需求为主,也就是说为了目的才对资源进行同步互斥方面的控制(从交集部分)。






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值