同步通信

进程,线程通信与同步

谁都会走 提交于 2020-01-21 00:04:48
原文链接 1.0 Linux进程间通讯 管道/FIFO:管道中还有命名管道和非命名管道(即匿名管道)之分,非命名管道(即匿名管道)只能用于父子进程通讯,命名管道可用于非父子进程,命名管道就是FIFO,管道是先进先出的通讯方式 消息队列:消息队列是用于两个进程之间的通讯,首先在一个进程中创建一个消息队列,然后再往消息队列中写数据,而另一个进程则从那个消息队列中取数据. 需要注意的是,消息队列是用创建文件的方式建立的,如果一个进程向某个消息队列中写入了数据之后,另一个进程并没有取出数据,即使向消息队列中写数据的进程已经结束,保存在消息队列中的数据并没有消失,也就是说下次再从这个消息队列读数据的时候,就是上次的数据!!!! 信号量:信号量,它与WINDOWS下的信号量是一样的,所以就不用多说了 共享内存:共享内存,类似于WINDOWS下的DLL中的共享变量,但LINUX下的共享内存区不需要像DLL这样的东西,只要首先创建一个共享内存区,其它进程按照一定的步骤就能访问到这个共享内存区中的数据,当然可读可写 信号:signal 套接字socket IPC比较 1.管道:速度慢,容量有限,只有父子进程能通讯 2.FIFO:任何进程间都能通讯,但速度慢 3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题 4.信号量:不能传递复杂消息,只能用来同步 5.共享内存

C#多线程的同步与通信

爷,独闯天下 提交于 2020-01-18 23:44:40
C#中使用lock和Monitor控制多线程对资源的使用,最常见的生产者和消费者问题就是多线程同步和通信的经典例子。这篇文章通过例子来了解C#多线程的同步与通信。 一、关于lock和Monitor lock可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其它线程必须等待。格式定义如下: lock(expression) statement_block expression代表要跟踪的对象,通常是引用。一般地,如果想保护一个类的实例,使用this;如果保护一个静态变量(如互斥代码段在一个静态方法内部),使用类名就可以了。而statement_block就是互斥段的代码。 Monitor用于多线程公用一个对象时使线程共享资源的方案。Monitor必须和一个具体的对象相关联。 二、生产者和消费者问题 假设两个线程同时维护一个队列,如果一个线程对队列中更新元素,而另外一个线程从队列中获取元素,那么我们称更新元素的线程为生产者,称获取元素的线程为消费者。 1、被操作对象 /// <summary>; /// 被操作对象 /// </summary>; public class Counter { //更新和读取的数字 private int numberOfCounter; //读操作可执行标记,可以防止死锁的发生 private

Java 多线程间的通讯

瘦欲@ 提交于 2020-01-13 20:32:26
问题 在前一小节,介绍了在多线程编程中使用同步机制的重要性,并学会了如何实现同步的方法来正确地访问共享资源。这些线程之间的关系是平等的,彼此之间并不存在任何依赖,它们各自竞争CPU资源,互不相让,并且还无条件地阻止其他线程对共享资源的异步访问。然而,也有很多现实问题要求不仅要同步的访问同一共享资源,而且线程间还彼此牵制,通过相互通信来向前推进。那么,多个线程之间是如何进行通信的呢? 解决思路 在现实应用中,很多时候都需要让多个线程按照一定的次序来访问共享资源,例如,经典的生产者和消费者问题。这类问题描述了这样一种情况,假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中的产品取走消费。如果仓库中没有产品,则生产者可以将产品放入仓库,否则停止生产并等待,直到仓库中的产品被消费者取走为止。如果仓库中放有产品,则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止。显然,这是一个同步问题,生产者和消费者共享同一资源,并且,生产者和消费者之间彼此依赖,互为条件向前推进。但是,该如何编写程序来解决这个问题呢? 传统的思路是利用循环检测的方式来实现,这种方式通过重复检查某一个特定条件是否成立来决定线程的推进顺序。比如,一旦生产者生产结束,它就继续利用循环检测来判断仓库中的产品是否被消费者消费

通信原理第七章,第九章,第十章,第十一章

霸气de小男生 提交于 2020-01-11 02:10:12
文章目录 第七章 信道;接收端均衡 信道路径损耗值: 信道均衡 第九章 接收端解调:同步 载波同步 位同步 帧同步 第十章 扩频通信技术 扩频系统 扩频目的: 扩频系统特点: 扩频系统优点: 扩频系统组成: 主要技术指标: 扩频系统分类: 伪随机序列的选择: 第十一章 第七章 信道;接收端均衡 恒参信道:信道的特定参数恒定不变的信道。有线信号传输,无线视距中继 随参信道:信道特性参数随时间随机变化的信道。短波通信(接收到多径信号),散射信道,移动通信信道 信道路径损耗值: 恒参信道的路径损耗只与传输距离有关。 随参信道的路径损耗除了与距离d有关,还受其他因素影响。 自由空间路径损耗,p313 ,适用于天线发送与接收情况 L P =P t /P r =(G t G r ) -1 (λ/4pi×d) -2 多普勒频移/多普勒效应,p316 窄带衰落模型: 调制信号都是窄带信号,因此适用于调制系统。 窄带信号包络服从瑞利分布,载波的相位服从均匀分布。若多径中有直射径,则信号包络服从莱斯分布,信号相位取决于直射径信号。 平坦衰落信道: 信道h(t),输入信号s(t),噪声n(t) 输出r(t)=s(t)h(t)+n(t) 在平均功率取定的情况下,在 信道信噪比条件好 时,应该 加大信号的发射功率 ,而在 信噪比较差 时,则应 减少发射功率

socket阻塞与非阻塞,同步与异步

时间秒杀一切 提交于 2020-01-04 05:00:55
简单点说 : 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的 send 和 recv 两个函数来说吧 ... 比如你调用 send 函数发送一定的 Byte, 在系统内部 send 做的工作其实只是把数据传输 (Copy) 到 TCP/IP 协议栈的输出缓冲区 , 它执行成功并不代表数据已经成功的发送出去了 , 如果 TCP/IP 协议栈没有足够的可用缓冲区来保存你 Copy 过来的数据的话 ... 这时候就体现出阻塞和非阻塞的不同之处了 : 对于阻塞模式的 socket send 函数将不返回直到系统缓冲区有足够的空间把你要发送的数据 Copy 过去以后才返回 , 而对于非阻塞的 socket 来说 send 会立即返回 WSAEWOULDDBLOCK 告诉调用者说 :" 发送操作被阻塞了 !!! 你想办法处理吧 ..." 对于 recv 函数 , 同样道理 , 该函数的内部工作机制其实是在等待 TCP/IP 协议栈的接收缓冲区通知它说 : 嗨 , 你的数据来了 . 对于阻塞模式的 socket 来说如果 TCP/IP 协议栈的接收缓冲区没有通知一个结果给它它就一直不返回 : 耗费着系统资源 .... 对于非阻塞模式的 socket 该函数会马上返回 , 然后告诉你 :WSAEWOULDDBLOCK---" 现在没有数据 ,

Socket阻塞模式和非阻塞模式的区别

牧云@^-^@ 提交于 2020-01-04 05:00:39
简单点说: 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如果TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的数据的话...这时候就体现出阻塞和非阻塞的不同之处了:对于阻塞模式的socket send函数将不返回直到系统缓冲区有足够的空间把你要发送的数据Copy过去以后才返回,而对于非阻塞的socket来说send会立即返回 WSAEWOULDDBLOCK告诉调用者说:"发送操作被阻塞了!!!你想办法处理吧..." 对于recv函数,同样道理,该函数的内部工作机制其实是在等待TCP/IP协议栈的接收缓冲区通知它说:嗨,你的数据来了.对于阻塞模式的socket 来说如果TCP/IP协议栈的接收缓冲区没有通知一个结果给它它就一直不返回:耗费着系统资源....对于非阻塞模式的socket该函数会马上返回,然后告诉你:WSAEWOULDDBLOCK---"现在没有数据,回头在来看看" 扩展: 在进行网络编程时,我们常常见到同步、异步、阻塞和非阻塞四种调用方式。这些方式彼此概念并不好理解。下面是我对这些术语的理解。

Lock&Condition实现线程同步通信

梦想的初衷 提交于 2020-01-01 09:35:06
Definition Condition 的功能类似于传统线程技术中的Object.wait和Object.notify的功能。 一个锁内部可以有多个Condition,即有多路等待和通知。 在传统的线程机制中一个监视器对象只能有一路等待和通知,要想实现多路等待和通知,必须嵌套使用多个同步监视器对象。 Example 多路等待示例: 1、模板代码 class BoundedBuffer { final Lock lock = new ReentrantLock(); final Condition notFull = lock.newCondition(); final Condition notEmpty = lock.newCondition(); final Object[] items = new Object[100]; int putptr, takeptr, count; public void put(Object x) throws InterruptedException { lock.lock(); try { while (count == items.length) notFull.await(); items[putptr] = x; if (++putptr == items.length) putptr = 0; ++count; notEmpty

操作系统期末复习

青春壹個敷衍的年華 提交于 2019-12-28 00:44:36
操作系统考纲 第一章 操作系统的概述 1.操作系统的概念、地位和作用 2.操作系统的发展历程 单道批处理OS 多道批处理OS(重) 分时OS(为了快速和用户交互) 实时OS(考虑响应问题) 个人计算机OS(具有以上三种特点) 网络OS 3.操作系统的特征 并发性(区别并行) 共享性 虚拟性(为了提高共享) 异步性(进程的推进速度不可预知,是并发导致的) 第二章(重)进程管理 1.进程的概念、特征及状态 就绪,执行,阻塞(哪些状态可以转换,哪些状态不能转换,什么时候会发生转换) 虚拟内存引入后五种状态 2.进程的组成及上下文 进程的组成 程序段:进程执行时的程序代码 数据段:进程执行时所需要的数据 进程控制块(PCB):进程存在的标志性数据结构 进程描述信息 处理机状态信息 进程调度信息 进程控制信息 进程上下文(概念) 3.进程和程序的关系 4.进程的互斥 与互斥相关的概念 互斥的概念及特征 互斥遵循的规则 互斥的实现方法 软件实现方法 硬件实现方法:硬件指令 信号量机制实现进程互斥 信号量的引入 信号量的作用 信号量的类型 整形信号量 记录型信号量 AND型信号量 信号量集 信号量的操作 初始化(建立)【说明所建信号量所代表的意义;赋初值,清空等待信号量的进程表】 等待信号量【WAIT(信号量);P(信号量)】 释放信号量【SIGNAL(信号量);V(信号量)】

Java之线程通信的方法

蹲街弑〆低调 提交于 2019-12-26 01:41:34
/** * 线程通信的例子:使用两个线程打印 1-100。线程1, 线程2 交替打印 * * 涉及到的三个方法: * wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。 * notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。 * notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。 * * 说明: * 1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。 * 2.wait(),notify(),notifyAll()三个方法的调用者必须是同步代码块或同步方法中的同步监视器。 * 否则,会出现IllegalMonitorStateException异常 * 3.wait(),notify(),notifyAll()三个方法是定义在java.lang.Object类中。 * * 面试题:sleep() 和 wait()的异同? * 1.相同点:一旦执行方法,都可以使得当前的线程进入阻塞状态。 * 2.不同点:1)两个方法声明的位置不同:Thread类中声明sleep() , Object类中声明wait() * 2)调用的要求不同:sleep()可以在任何需要的场景下调用。 wait()必须使用在同步代码块或同步方法中 * 3

地铁通信时钟同步系统的调试

谁说胖子不能爱 提交于 2019-12-24 11:59:36
通信时钟同步系统是地铁轨道交通运行的重要组成部份之一,其主要作用是为地铁工作人员和乘客提供统一的标准时间,并为通信系统及其它各有关系统(ATS 、AFC 、ISCS、PSCADA 等)提供统一的标准时间信号,使各系统的定时设备与本系统同步,从而实现地铁全线统一的标准时间信息。 1、地铁通信时钟同步系统的构成 地铁时钟的投入在保证地铁运行计时准确、提高运营服务质量方面起到了重要的作用。 以某地铁三号线为例,是按照两级组网的方式设置的即整个通信时钟同步系统是由中心一级母钟和二级母钟、数字式显示时间的子钟、监控终端(整个通信时钟同步系统的维护)、电源、分路输出接口设备及传输通道等构成。其中二级母钟是分管车站、车辆段及停车场。 2、地铁通信时钟与相关系统的接口关系 地铁通信时钟系统的调试是地铁综合联调的关键项目,是保障地铁安全运营的有效措施,因此要合理组织时钟系统的综合联调,在有限时间内成时钟系统与各系统间的系统联调,并及时解决不满足运营安全要求的问题,安全有序的组织施工调试,满足地铁运营要求。 (1)与传输系统接口:由传输为控制中心一级母钟到各车站、车辆段、停车场的二级母钟提供信号传输通道,时钟系统为传输系统网管设备提供标准时间信号; (2)与综合网络管理系统接口:时钟系统为综合网络管理系统提供设备故障告警信息,时钟系统为综合网管系统提供标准时间信号; (3)与电源系统接口