一、设计要求设计一个模拟仿真“生产者-消费者”问题的解决过程及方法的程序。
主要内容是P、V操作过程的设计与实现。
生产消费者问题是操作系统设计中经常遇到的问题。
多个生产者和消费者线程访问在共享内存中的环形缓冲。
生产者生产产品并将它放入环形缓冲,同时消费者从缓冲中取出产品并消费。
当缓冲区满时生产者阻塞并且当缓冲区有空时生产者又重新工作。
类似的,消费者当缓冲区空时阻塞并且当缓冲区有产品时又重新工作。
显然,生产者和消费者需要一种同步机制以协调它们的工作。
二、系统功能本程序模拟实现了“生产者-消费者”问题的解决过程,用图形界面动态演示了P、V操作过程以及生产者、消费者进程之间的工作流程。
本程序使用的算法是典型的P、V操作使用信号量解决“生产者-消费者”问题。
本程序在界面上使用了Java的swing接口函数,用矩形条表示生产者进程中待生产的产品,并设置了三个分区分别表示生产者进程待生产的产品、公共缓冲池中已生产的产品和消费者进程已消费的产品,以动画的效果动态演示了待生产产品变成消费者进程中已消费产品的过程,以及在这一过程中生产者进程和消费者进程协调工作的过程。
在程序运行过程中使用了两个生产者线程和两个消费者线程并发工作,并使用了线程随机休眠的策略,即每个线程在完成一次生产过程或消费过程后随机休眠1至10秒钟。
这一策略能保证生产者和消费者之间的运行顺序被打破,从而产生生产产品和消费产品之间的矛盾(即没有产品可消费的情况下消费者试图向公共缓冲池取产品消费、公共缓冲池里的产品已满的情况下生产者试图生产产品放入缓冲池)。
因为生产者生产产品和消费者消费产品都是随机的,所以产生的矛盾也是不可预知的,在这种情况下,才能检验所使用的算法是否健壮高效。
而本程序正是基于这种思想设计出来的,用来模拟生产者消费者问题的解决过程。
本程序在运行时提供友好的交互界面,且操作简单,在模拟过程中各种情况有相应文字提示,并伴有相应的图像变化,如:当没有产品可消费的情况下消费者试图向公共缓冲池取产品消费,消费者进程阻塞,公共缓冲池随之变成红色,文字提示框内显示warning:it'sempty!Consumerisblock;
当缓冲池已满而生产者试图生产产品并向缓冲池放入产品时,生产者进程阻塞,公共缓冲池里的每一个产品变成黄色,问题提示框显示warning:it'sfull!Producerisblock。
整个模拟过程通俗易懂,利于理解,能很好的协助使用者加强生产者消费者问题的理解。
1
CSerialPortFirstVersionbyRemonSpekreijseon2000-02-08http://www.codeguru.com/cpp/i-n/network/serialcommunications/article.php/c2483/A-communication-class-for-serial-port.htmSecondVersionbymrlongon2007-12-25https://code.google.com/p/mycom/增加ClosePort增加WriteToPort两个方法增加SendData与RecvData方法byliquanhaion2011-11-04http://blog.csdn.net/liquanhai/article/details/4955253增加ClosePort中交出控制权,防止死锁问题byliquanhaion2011-11-06http://blog.csdn.net/liquanhai/article/details/6941574增加ReceiveChar中防止线程死锁byviruscampon2013-12-04https://github.com/viruscamp/CSerialPort增加IsOpen判断能否打开修正InitPort中parityOddEven参数取值错误修改InitPort中portnr取值范围,portnr>9时特殊处理取消对MFC的依赖,使用HWND替代CWnd,使用win32thread函数而不是MFC的增加用户消息编号自定义,方法来自CnCommbyitas109on2014-01-10http://blog.csdn.net/itas109/article/details/18358297解决COM10以上端口无法显示的问题扩展可选择端口,最大值MaxSerialPortNum可以自定义添加QueryKey()和Hkey2ComboBox两个方法,用于自动查询当前有效的串口号。
byliquanhaion2014-12-18增加一些处理措施,主要是对减少CPU占用率byitas109on2016-05-07http://blog.csdn.net/itas109修复每次打开串口发送一次,当串口无应答时,需要关闭再打开或者接收完数据才能发送的问题。
解决办法:在m_hEventArray中调整m_hWriteEvent的优先级高于读的优先级。
CommThread(LPVOIDpParam)函数中读写的位置也调换。
参考:http://zhidao.baidu.com/link?url=RSrbPcfTZRULFFd2ziHZPBwnoXv1iCSu_Nmycb_yEw1mklT8gkoNZAkWpl3UDhk8L35DtRPo5VV5kEGpOx-Gea修复停止位在头文件中定义成1导致SetCommState报错的问题,应为1对应的停止位是1.5。
UINTstopsbits=ONESTOPBITswitch(stopbits)和switch(parity)增加默认情况,增强程序健壮性byitas109on2016-06-22http://blog.csdn.net/itas109增加ReceiveStr方法,用于接收字符串(接收缓冲区有多少字符就接收多少字符)。
解决ReceiveChar只能接收单个字符的问题。
byitas109on2016-06-29http://blog.csdn.net/itas109解决RestartMonitoring方法和StopMonitoring方法命令不准确引起的歧义,根据实际作用。
将RestartMonitoring更改为ResumeMonitoring,将StopMonitoring更改为SuspendMonitoring。
增加IsThreadSuspend方法,用于判断线程能否挂起。
改进ClosePort方法,增加线程挂起判断,解决由于线程挂起导致串口关闭死锁的问题。
增加IsReceiveString宏定义,用于接收时采用单字节接收还是多字节接收byitas109on2016-08-02http://blog.csdn.net/itas109https://github.com/itas109改进IsOpen方法,m_hComm增加INVALID_HANDLE_VALUE的情况,因为CreateFile
2021/9/12 2:07:30 19KB CSerialPort 串口类 串口
1
一个小工具,将TS流文件发送到以太网络上。
支持使用UDP或者RTP协议。
根据TS流的PCR值跟踪时间同步发送。
我用的GetTickCount进行发送时间同步,线程按照10毫秒进行轮回,按照Win32系统普通线程切换时间,应该可以保证到10毫秒左右的同步精度。
但听人提过使用GetTickCount进行时间同步,长时间会有时间漂移现象,而且误差会逐渐累加,直到客户端缓冲溢出。
对方提出的处理方案是使用GPS卫星时间同步...个人以为GetTickCount是使用Win32底层的某个高精度时间结果。
在微观上不是很精确,但是宏观上应该是很精确。
我实际曾经使用这个工具,发送过同一个文件三天三夜,客户端使用VideoLan进行在线播放,缓冲设置300ms,没有发现VideoLan缓冲有溢出的情况。
如果这种同步方式,长时间发送,确实有精度问题,希望有同志给出例证和处理方案(除了使用GPS卫星时间以外的方案...)。
以便我改进。
demo中根据以太网通常的MTU值直接按7个TS包进行封装:SetGetTsPacketDataCB(GetTsPacketData,NULL,TS_PACKET_SIZE_MIN*7);如果是其他网络类型,需要根据网络的MTU值调整TS包数量。
2018/5/3 18:47:12 18KB TS
1
介绍一个简单的程序,用于计算无法直接加载到内存(1GB)的大文件(100GB)中最常出现的url的topn。
用法生成测试数据makedata使用1GB网址进行测试maketest使用100GB网址运行makerun算法根据hash(url)将输入文件拆分为1009个小文件。
加载每个小文件,通过dict计算url的出现次数,然后通过堆获取topn出现次数。
合并步骤2中所有出现的topn事件,并获得最终的topn并进行打印。
复杂度分析N是网址数。
NS是分割文件的数量,等于1009。
K是我们想要的结果URL的数量,等于100。
BS是缓冲区大小的大小,可能是4096或8192,请参见步骤1从输入文件读取或写入拆分文件的时间均为N/BS*T(diskio),哈希计算的时间为N*T(hash),因而时间复杂度为O(max(2*N
2022/9/25 16:57:51 14.13MB C
1
完成端口通讯服务器(IOCPSocketServer)设计(六)功能强大的IOCPSocketServre模块例程源码Copyright©2009代码客(卢益贵)版权所有QQ:48092788 源码博客:http://blog.csdn.net/guestcode一、声明版权声明:1、通讯模块代码版权归作者所有;
2、未经许可不得全部或部分用于任何项目开发;
3、未经许可不得部分修改后再利用源码。
免责声明:1、 由于设计缺陷或其它Bug造成的后果,作者不承担责任;
2、未经许可的使用作者不提供任何技术支持服务。
权利和义务:1、任何获得源码并发现Bug的个人或单位均有义务向作者反映;
2、作者保留追究侵权者法律责任的权利。
二、开发背景部分代码由前项目分离而来,尚未有应用考验,但对于初学者学习和进阶有很大帮助。
功能上尚未有定论,但应该不会令你失望。
三、功能说明1、可以关闭Socket的Buffer;2、可以关闭MTU(不等待MTU满才发送);
3、可以多IP或多端口监听;
4、可以重用socket(主动关闭除外);
5、可以0缓冲接收(Socket的Buffe=0时,避免过多的锁定内存页);
6、可以0缓冲连接(客户端仅连接,不一定立即发数据);
7、可以条件编译:a、是否使用内核Singly-linkedlists;
b、是否使用处理线程(工作线程和处理线程分开);
c、是否使用内核锁来同步链表。
8、可以实现集群服务器模式的通讯(有客户端socket);
9、可以单独设置每个连接的Data项来实现连接和Usernfo的关联;
10、每个线程有OnBegin和OnEnd,用于设置线程独立的对象(数据库会话对象);
11、可以提供详细的运行情况,便于了解IOCP下的机制,以及进行调试分析;
12、可以发起巨量连接和数据(需要硬件配置来支持)。
2019/3/8 21:17:23 966KB IOCP Socket Servre
1
一. 实验目的1. 了解存储器的组成结构,原理和读写控制方法2. 了解主存储器工作过程中各信号的时序关系3. 了解挂总线的逻辑器件的特征4. 了解和掌握总线传送的逻辑实现方法二. 实验原理1.基本操作:读写操作读操作是从指定的存储单元读取信息的过程;
写操作是将信息写入存储器指定的存储单元的过程2.读写操作过程首先要由地址总线给出地址信号,选择要进行读写操作的存储单元,然后,做写操作时,先从数据总线输入要存储在该单元的数据,通过控制总线发出相应的写使能和写控制信号,这时,数据保存在该单元中;
做读操作时,只需通过总线发出相应的读控制信号。
该数据就出现在总线上了3.总线传送计算机的工作过程,实际上也就是信息的传送和处理过程,而信息的传送在计算机里面频度极高,采用总线传送必不可少,它可减少传输线路、节省器件、提高传送能力和可靠性。
总线传送器件中大量使用的是三态门。
三态门(ST门)主要用在应用于多个门输出共享数据总线,为避免多个门输出同时占用数据总线,这些门的使能信号(EN)中只允许有一个为有效电平(如低电平),由于三态门的输出是推拉式的低阻输出,且不需接上拉(负载)电阻,所以开关速度比OC门快,常用三态门作为输出缓冲器。
其中74LS244是专用做挂总线用的三态门器件之一。
1
原始图警告:该项目不再维护。
对于SQL数据映射,请使用。
protoc-gen-map通过将SQL数据映射到协议缓冲区来简化复杂数据集的管理。
除了定义原型消息和SQL语句外,开发人员无需编写任何数据检索或映射代码。
方法protoc-gen-map采用“数据库映射”方法(在MartinFowler的描述),在具有严格代码审查流程和专门的数据库建模人员团队的组织中非常有用。
protoc-gen-map与语言无关。
任何支持协议缓冲区的语言都可以使用已定义的消息通过gRPC请求和检索数据。
该框架不是对象关系映射器(ORM)。
对于大型和复杂的数据集,在处理复杂查询时,使用ORM会受到限制并降低功能。
SQL模板protoc-gen-map使用golang的模板引擎(文本/模板)。
这使开发人员可以根据gRPC请求消息动态修改sql参数,使用if语句或for循环,以及将大型SQL语句拆分为多个逻辑块。
下面的示例中有更多内容。
范例与指南简单的例子让我们使用一个非常简单的模式假设我们要根据某些请求检索博客信息。
为此,我们可以如下创建gRPC服务和SQL模板
2018/9/14 6:45:12 136KB go sql protobuf grpc
1
最近有项目要做一个高功能网络服务器,决定下功夫搞定完成端口(IOCP),最终花了一个星期终于把它弄清楚了,并用C++写了一个版本,效率很不错。
但,从项目的总体需求来考虑,最终决定上.net平台,因此又花了一天一夜弄出了一个C#版,在这与大家分享。
一些心得体会:1、在C#中,不用去面对完成端口的操作系统内核对象,Microsoft已经为我们提供了SocketAsyncEventArgs类,它封装了IOCP的使用。
请参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1。
2、我的SocketAsyncEventArgsPool类使用List对象来存储对客户端来通信的SocketAsyncEventArgs对象,它相当于直接使用内核对象时的IoContext。
我这样设计比用堆栈来实现的好处理是,我可以在SocketAsyncEventArgsPool池中找到任何一个与服务器连接的客户,主动向它发信息。
而用堆栈来实现的话,要主动给客户发信息,则还要设计一个结构来存储已连接上服务器的客户。
3、对每一个客户端不管还发送还是接收,我使用同一个SocketAsyncEventArgs对象,对每一个客户端来说,通信是同步进行的,也就是说服务器高度保证同一个客户连接上要么在投递发送请求,并等待;
或者是在投递接收请求,等待中。
本例只做echo服务器,还未考虑由服务器主动向客户发送信息。
4、SocketAsyncEventArgs的UserToken被直接设定为被接受的客户端Socket。
5、没有使用BufferManager类,因为我在初始化时给每一个SocketAsyncEventArgsPool中的对象分配一个缓冲区,发送时使用Arrary.Copy来进行字符拷贝,不去改变缓冲区的位置,只改变使用的长度,因此在下次投递接收请求时恢复缓冲区长度就可以了!如果要主动给客户发信息的话,可以new一个SocketAsyncEventArgs对象,或者在初始化中建立几个来专门用于主动发送信息,因为这种需求一般是进行信息群发,建立一个对象可以用于很多次信息发送,总体来看,这种花销不大,还减去了字符拷贝和消耗。
6、测试结果:(在我的笔记本上时行的,我的本本是T420I78G内存)100客户100,000(十万次)不间断的发送接收数据(发送和接收之间没有Sleep,就一个一循环,不断的发送与接收)耗时3004.6325秒完成总共10,000,000一千万次访问平均每分完成199,691.6次发送与接收平均每秒完成3,328.2次发送与接收整个运行过程中,内存消耗在开始两三分种后就保持稳定不再增涨。
看了一下对每个客户端的延迟最多不超过2秒。
2020/5/13 2:27:34 15KB IOCP 完成端口 源码
1
ArcGIS实验指导书(完整版下载)实验一、使用ARCMAP浏览地理数据1一、实验目的1二、实验预备1三、实验步骤及方法3第1步启动ArcMap3第2步检查要素图层5第3步显示其它图层6第4步查询地理要素7第5步检查其它属性信息9第6步设置并显示地图提示信息11第7步根据要素属性设置图层渲染样式14第8步根据属性选择要素18第9步使用空间关系选择地理要素20第10步退出ArcMap22四、实验报告要求23实验二、空间数据库管理及属性编辑24一、实验目的24二、实验预备24三、实验内容及步骤25第1步启动ArcCatalog打开一个地理数据库25第2步预览地理数据库中的要素类26第3步创建缩图,并查看元数据28第4步创建个人地理数据库(PersonalGeodatabase-PGD)29第5步拖放数据到ArcMap中37第6步编辑属性数据及进行1:M的空间查询38第7步导入GPS数据,生成图层40四、实验报告要求44实验三、影像配准及矢量化46一、实验目的46二、实验预备46三、实验内容及步骤46第1步地形图的配准-加载数据和影像配准工具46第2步输入控制点47第3步设定数据框的属性49第4步矫正并重采样栅格生成新的栅格文件52第5步分层矢量化-在ArcCatalog中创建一个线要素图层53第6步从已配准的地图上提取等高线并保存到上面创建的要素类中58第7步根据GPS观测点数据配准影像并矢量化的步骤59四、实验报告及要求65实验四、空间数据处理66一、实验目的66二、实验预备66三、实验内容及步骤68空间数据处理68第1步裁剪要素68第3步要素融合71第4步图层合并72第5步图层相交74定义地图投影75第6步定义投影75第7步投影变换――地理坐标系->北京1954坐标系转换->西安80坐标系76四、实验报告要求77实验五、空间分析基本操作79一、实验目的79二、实验预备79三、实验内容及步骤80空间分析模块801.了解栅格数据812.用任意多边形剪切栅格数据(矢量数据转换为栅格数据)833.栅格重分类(RasterReclassify)864.栅格计算-查询符合条件的栅格(RasterCalculator)875.面积制表(TabulateArea)886.分区统计(ZonalStatistic)907.缓冲区分析(Buffer)928.空间关系查询959.采样数据的空间内插(Interpolate)9610.栅格单元统计(CellStatistic)10011.邻域统计(Neighborhood)102四、实验报告要求104实验六、缓冲区分析应用(综合实验)105一、实验目的105二、实验预备105三、实验内容及步骤1051.距离制图-创建缓冲区1051.1点要素图层的缓冲区分析1051.2线要素图层的缓冲区分析1071.3多边形图层的缓冲区分析1092.综合应用实验1102.1水源污染防治1102.2受污染地区的分等定级1122.3城市化的影响范围115四、实验报告要求118实验七、地形分析-----TIN及DEM的生成及应用(综合实验)119一、实验目的119二、实验预备119三、实验内容及步骤1191.TIN及DEM生成1191.1由高程点、等高线矢量数据生成TIN转为DEM1191.2TIN的显示及应用1222.DEM的应用1332.1坡度:Slope1332.2坡向:Aspect1362.3提取等高线1382.4计算地形表面的阴影图1392.5可视性分析1422.6地形剖面144四、实验报告要求145实验八、MODELBUILDER土壤侵蚀危险性建模分析(综合实验)146一、实验目的146二、实验预备146三、实验内容及步骤1461.认识ModelBuilder操作界面1462.确定目标,加载数据1473.创建模型1474.编辑模型1505.执行模型,查看结果164四、实验报告要求165实验九、水文分析-DEM应用169一、实验目的169二、实验预备169三、实验内容及步骤1721.数据基础:无洼地的DEM1722.关键步骤:流向分
2020/8/13 2:15:16 14.21MB ArcGIS实验指导书(完整版下载)
1
CSpect插件各种插件,和:trade_mark:的仿真器。
在下载最新版本。
外挂程式UART记录器一个可配置的记录器,用于CSpect模仿的NextESP和PiUART。
有关安装和配置的详细信息,请参见其。
UART替换缓冲的UART替代内部CSpect模仿的UART。
有关安装和配置的详细信息,请参见其。
备用UART将二进制字节写入串行端口,而内部CSpectUART将字节限制为ASCII字符0x00..0x3f。
发送AT指令到ESP-01并不重要,但是使用对ESP进行编程需要一个二进制UART。
UART使用预分频器计算(考虑当前视频时序)动态响应写入的UARTI/
2020/3/14 8:03:41 793KB plugin emulator csharp plugins
1
共 297 条记录 首页 上一页 下一页 尾页
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡