
环形缓冲器 是一种特定的 队列 。所以它也被称作为 圆形队列 。如果你对于队列不太熟悉的话,你从名字上来看你至少能反映出它是一种直线的队伍(如同大家排队去上卫生间)。这个队列里是 先进先出(FIFO) 。所以意味着,第一个进入队伍的人,会第一个出队。那么到底环形缓冲器是如何与众不同的呢?
环形缓冲区通常储存数据在一个定长的数组里(array)。因此只要长度确定以后,它通过两个指针分别指向这个队列的队尾和队首的位置,来追踪队伍的情况。只需要根据队伍的新元素的增加和减少,相应的向前移动指针。而无需去动态地去 *** 作这个数组。举个例子,队首被推出了队列,那么其他队伍里的元素都需要向前移动一位。这种 *** 作是比较低效的。所以环形缓冲区避免了这种 *** 作。因为这个环形队列的实现是数组,所以只能通过添加新元素到队首或者队尾。假如需要添加元素到队列的中间,则可能需要使用链表来实现。
一般来说,这个队列里面没有任何元素的时候和队列已经满的时候,头指针和尾指针是 指轿亮缺向同一个位置 的。
当元素被添加到队列里时,头指针向前移动一此。当元素从队列里删除时,尾指针同理。但是尾指针永远都不应该跳过头指针,因为你生产者永远排在消费者前面,或者当队列为空时两个指针指向同一个元素。当指针移动到数组的末尾位置,它将重新跳转回数组的起始位置。并且 头指针和写指针之间是线程安全的 。假如有多个消费者和生产者公用指针,则需要加锁来保证线程安全。
缓冲区是满、或是空,都有可能出现读指针与写指针指向同一位置。有多种策略用于检测缓冲区是满、或是空。
1. 总是保持一个存储单元为空缓冲区中总是有一个存储单元保持未使用状态。缓冲区最多存入(size-1)。个数据。如果读写指针指向同一位置,则缓冲区为空。如果写指针位于读指针的相邻后一个位置,则缓冲区为满。这种策略的优点是简单、粗暴;缺点是语义上实际可存数据量与缓冲区容量不一致,测试缓冲区是否满需要做取余数计算。
2. 使用数据计数这种策略。不使用显式的写指针,而是保持着缓冲区内存储的数据的计数。因此测试缓冲区是空是满非常简单;对性能影响可以忽略。缺点是读写 *** 作都需要修改这个存储数据计数,对于多线程访问缓冲区需要并发控制。
3. 镜像指示位。缓冲区的长度如果是n,逻辑地址空间则为0至n-1;那么,规定n至2n-1为镜像逻辑地址空间。本策略规定读写指针的地址空间为0至2n-1,其中低半部分对应于常规的逻辑地闭辩址空间,高半部分对应于镜像逻辑地址空间。当指针值大于等于2n时,使其折返(wrapped)到ptr-2n。使用一位表示写指针或读指针是否进入了虚拟的镜像存储区:置位表示进入,不置位表示没进入还在基本存储区。
4. 在读写指针的值相同情况下,如果二者的指示位相同,说明缓冲区为空;如果二者的指示位不同,说明缓冲区为满。这种方法优点是测试缓冲区满/空很简单;不需要做取余数 *** 作;读写线程可以分别设计专用算法策略,能实现精致的并发控制。 缺点是读写指针各需要额外的一位作为指示位。
如果缓冲区长度是2的幂,则本方法可以省略镜像指示位。如果读写指针的值相等,则缓冲区为空;如果读写指针相差n,则缓冲区为满,这可以用条件表达式(写指针 == (读指针异或缓冲区长度))来判断。
5. 读/写计数用。两个有符号整型变量分别保存写入、读出缓冲区的数据数量。其差值就是缓冲区中尚未被处理的有效数据的数量。这种方法的优点是读线程、写线程互不干扰;缺点是需要额外两个变量。
6. 使用一位记录最后一次 *** 作是读还是写。读写指针值相等情况下,如果最后一次 *** 作为写入,那么缓冲区是满的;如果最后一次 *** 作为读出,那么缓冲区是空。这种策略的缺点是读写 *** 作共享一个标志位,多线程时需要并发控制。
Reference:
https://en.wikipedia.org/wiki/Circular_buffer
在开始作图按钮位置。第一步:进入spss,点击“开始作图”按钮。
第二步:新建环形图。依次点击“图表”—“渣旦环形图”。然后从例子库中,选择一个模板,点击打开环形图模板。
第三步:先点击画布中的环形图,再点击右侧属性面板中的数据符号,最后点击“图表数据”,通过修改表格中的数据,即可改变画布如迹扰中环形图的数据。当然,州好也可以直接导入excel或csv数据文件,一键生成环形图。
第四步:双击文本框,替换环形图模板里的文字。
第五步:完成环形图的绘制后,可以点击右上角的保存、下载、打印、分享等按钮,对绘制好的环形图作品进行存储。也可以将作品导出为图片、PDF、PPT等格式。
spss是通过对数据的处理而输出相应的图形:直方图、条形图、饼状图。
利用PS打开要处理的照片,双击背景层,将其转化成“图层0”。弊侍
选择“椭圆”选区工租闭具,按住键盘上的“Shift”+“Alt”键,然后利用鼠标绘制如图所示的圆形选区。
然后将“前景色”设置为“白色”,背景色设置为“黑色”。
点击“图层”面板中的“添加蒙板”按钮为“图层0”添加蒙板。
接下来对画布进行弊卜裂裁剪。选择“裁剪工具”,对画布进行适当的裁剪,双击应用裁剪 *** 作。
最后就可以将图片输出保存啦,点击“文件”->“存储为Web所有格式”项。
将文件类型设置为“PNG”,点击“存储”按钮输出结果即可。
最后来看一下效果:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)