02-dispatch_barrier
1 dispatch_barrier_async 概念
栅栏方法,暂时的将一部操作做成一个同步操作,向一个栅栏一样的分开
dispatch_barrier_async函数的作用是在进程管理中起到一个栅栏的作用,它等待所有位于barrier函数之前的操作执行完毕后执行,并且在barrier函数执行之后,barrier函数之后的操作才会得到执行,该函数需要同dispatch_queue_create函数生成的concurrent Dispatch Queue队列一起使用
2 作用
1.实现高效率的数据库访问和文件访问
2.避免数据竞争
3 注意点:
- 队列一定不能是全局队列(dispatch_get_global_queue)
- 使用自己创建的并发队列(dispatch_queue_create(“read_write_queue”, DISPATCH_QUEUE_CONCURRENT);)
- 函数必须为asyn
在前面的任务执行结束后它(栅栏函数)才执行,而且它后面的任务等它执行完成之后才会执行(它前面任务顺序不能控制,它后面的顺序也不能控制)
4 使用
- 不使用栅栏方法
#import "ViewController.h"@interface ViewController ()
{dispatch_queue_t _queue;}
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib._queue = dispatch_queue_create("read_write_queue", DISPATCH_QUEUE_CONCURRENT);[self read];[self read];[self write];
}
- (void)read{//dispatch_async(_queue, ^{sleep(1);NSLog(@"read");});
}
- (void)write
{dispatch_async(_queue, ^{sleep(1);NSLog(@"write");});
}@end// 并发队列异步执行 日志输出时间是一定的
2018-12-12 10:13:19.814352+0800 GCD_Dispatch_Barrier_Demo[3297:42890] read
2018-12-12 10:13:19.814375+0800 GCD_Dispatch_Barrier_Demo[3297:42891] read
2018-12-12 10:13:19.814367+0800 GCD_Dispatch_Barrier_Demo[3297:42892] write
- 使用栅栏方法,将异步操作暂时变成同步操作
@interface ViewController ()
{dispatch_queue_t _queue;}
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib._queue = dispatch_queue_create("read_write_queue", DISPATCH_QUEUE_CONCURRENT);[self read];[self read];[self write];
}
- (void)read{//dispatch_async(_queue, ^{sleep(1);NSLog(@"read");});
}
- (void)write
{// 使用栅栏方法dispatch_barrier_async(_queue, ^{sleep(1);NSLog(@"write");});}// 日志输出 则write 输出时间延迟1秒执行
2018-12-12 10:16:25.164446+0800 GCD_Dispatch_Barrier_Demo[3372:45243] read
2018-12-12 10:16:25.164445+0800 GCD_Dispatch_Barrier_Demo[3372:45244] read
2018-12-12 10:16:26.168443+0800 GCD_Dispatch_Barrier_Demo[3372:45244] write
相关文章:

sqljdbc.jar 和 sqljdbc4.jar
从微软官网下载的Sql server2008的JDBC jar包,解压后里面有两个jar包(sqljdbc.jar 和 sqljdbc4.jar)。到底应该用哪个呢? 地址: http://www.microsoft.com/downloads/details.aspx?FamilyIDa737000d-68d0-4531-b65d-d…

综合性深入的技术文章-20161103
已读文章: SqlServer性能检测和优化工具使用详细 百万级访问网站前期的技术准备 从100PV到1亿级PV网站架构演变 待阅读: 从0到千万级访问量网站架构演变史 memcached全面剖析–5. memcached的应用和兼容程序 PHP解决网站大流量与高并发 NGINX防御CC攻击教…
头条小视频和西瓜视频signature签名算法
点击上方↑↑↑蓝字[协议分析与还原]关注我们“分析今日头条内小视频和西瓜视频分享后浏览器打开所用的signature签名算法。” 上月写的一篇关于使用微信的wxid加好友的文章,竟然无意间碰到了一个微信搜索黑洞,成就了本号有史以来搜索量、阅读量、关注度…

一个winform带你玩转rabbitMQ
源码已放出 https://github.com/dubing/MaoyaRabbit 本章分3部分 一、安装部署初探 二、进阶 三、api相关 安装 部署 初探 先上图 一. 安装部署 下载 rabbitMQ :http://www.rabbitmq.com/download.html 安装rabbitmq需要erlang,下载erlang:ht…

03-dispatch_after
1 dispatch_after 概念 在指定时间之后将任务追加到主队列中。严格来说,这个时间并不是绝对准确的,但想要大致延迟执行任务,dispatch_after函数是很有效的。 NSLog("currentThread---%",[NSThread currentThread]); // 打印当前线…

C#模糊查询绑定datagridview
private CollectionViewSource wgdData new CollectionViewSource(); private DataTable Ds_wgd { get { return this.dgv_wgd.ItemsSource as DataTable; } set { wgdData.Source value; this.dgv_wgd.ItemsSource ((DataTable)wgdData.Source).DefaultView; } } //文本框修…

今日头条反爬措施形同虚设,论多平台协同在安全方面的重要性
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 玩头条练技能。”大家好,看到标题一定猜到了,我又来玩今日头条了,谁让它是东半球文明的杀时间神器呢。 想当年,头条刚问世,正愁长辈看新闻没合适且方便的工具࿰…

ueditor编辑器和at.js集成
源码: <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%//禁止jsp解析${} %> <% page isELIgnored"true"%> <%String path request.getContextPath();String basePath reques…

Java缓存学习之五:spring 对缓存的支持
(注意标题,Spring对缓存的支持 这里不单单指Ehcache ) 从3.1开始,Spring引入了对Cache的支持。其使用方法和原理都类似于Spring对事务管理的支持。Spring Cache是作用在方法上的,其核心思想是这样的:当…

04-dispatch_group
dispatch_group 实现线程同步 比如说,第一步我想先下载三张图片,然后第二步再去主线程刷新imgview 显示图片。 利用dispatch_group 来进行实现 ,简单来讲就四行代码. 就可以让代码按照你想要的顺序进行发生。 使用步骤 创建一个dispatch_g…
fiddler教程:抓包带锁的怎么办?HTTPS抓包介绍。
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 介绍Fiddler的HTTPS抓包功能。” 这里首先回答下标题中的疑问,fiddler抓包带锁的原因是HTTPS流量抓包功能开启,但解密功能未开启导致,只需要将HTTPS流量解密功能开启就能解决问题。01—作为一款…

如何实现后台向前台传数据
技术交流群:233513714 这两天正在研究如何让后天主动向前台展现数据,只要后台有数据上传的时候就向前台上传(因为公司有个项目,硬件设备会不断的上传数据,服务端将接收到的数据向前台展示)。在网上查了一下,下面将介绍…

05-dispatch_semphore
dispatch_semphore 信号量 dispatch_semaphore信号量为基于计数器的一种多线程同步机制。如果semaphore计数大于等于1,计数-1,返回,程序继续运行。如果计数为0,则等待。dispatch_semaphore_signal(semaphore)为计数1操作,dispatc…

[leetcode]_Integer to Roman
题目:对应之前那道将罗马数字转换整型数字的题目。反过来。 思路:刚开始做的时候,想着用程序进行判断,复杂的要死。网络了别人代码,非常清晰。 代码: 1 public String intToRoman(int num) {2 S…
fiddler使用技巧进阶,如何抓包修改数据?——AutoResponder重定向
“ 介绍Fiddler的AutoResponder重定向功能。” Fiddler功能十分强大,既能抓取报文,也能构造报文,本文继续介绍fiddler的功能,这次的功能与构造报文相关,用来回答标题中的疑问,即修改数据的方法,…

nginx基于IP的虚拟主机
知识点: server的语法: upstream语法: upstream中192.168.100.1不是ip只是个标识,只要和下面的proxy_pass 对应即可。 基于IP的虚拟主机: listen和server_name中多加上端口也没问题 listen可以监听在虚拟ip上面 代码&a…

读《人月神话》所感
《人月神话》 读书心得:因为现在还是学生,且没有什么真正在应用项目的开发经验,所以读《人月神话》这本书,与其说是在学习这位计算机先驱的经验,不如说是在了解一个大型软件系统的开发过程以及在开发过程中将会遇到的…
Android逆向之调试smali代码基础
点击上方↑↑↑蓝字[协议分析与还原]关注我们 “ 介绍Android逆向中调试smali代码的方法。” 最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享。 本文介绍Android逆向中smali代码的调试及环境的准备。 事先准备如下工具…

Python之路【第五篇】:面向对象及相关
Python之路【第五篇】:面向对象及相关 Python之路【第五篇】:面向对象及相关 面向对象基础 基础内容介绍详见一下两篇博文: 面向对象初级篇面向对象进阶篇其他相关 一、isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 123456class Foo…

关于安卓版的eclipse连接数据库并誓言增删改查
在安卓环境下连接数据库下面是主要代码极其作用: 1.编写 The Class类把课程表courses.db当做一个实体类,hashcode和equals这两个类是为了判断输入的查询内容和Excel表中的内容是否一致。 并在java里面区别两个对象是否一致 1 public class TheClass {2 …

07-主队列和全局队列
GCD 会主动的提供一个队列供开发者使用。 主队列 系统提供的串行队列 是在主线程执行的队列,所以是串行的队列。任务一个个执行。 dispatch_get_main_queue() 全局队列 系统提供的并发队列 全局队列是所有应用程序都能够使用的并发队列,不需要手动的创…
Android逆向--如何调试smali代码?
最近在重整Android逆向分析环境,一切都在从零开始,做下记录,给大家分享。 本文介绍Android逆向中smali代码的调试及环境的准备。 事先准备如下工具: Android killer:反编译APK应用为smali源码的工具 Android studi…

python -socket -client
socket client 发起连接。 流程为: 创建接口 发起连接 创建接口参数同socket server相同 发起连接的函数为socket.connect(ip,port) 这个地方的ip与port为socket server端的ip和监听port。 代码示例: # -*- coding: utf-8 -*-This is a testing program …

mysql的binlog太多太大占用了空间的解决办法
现象:网站访问越来越慢,最后无法访问了,经过检查发现磁盘满了 分析过程及解决方案:通常出现这种问题都应该登录服务器检查磁盘、内存和进程使用的情况,通过top、df –h和free –m来检查,发现磁盘空间满了。…

08-dispatch_apply
1 dispatch_apply dispatch_apply 是按照指定的次数将指定的block 添加到指定的queue当中去。 可以用于快速的迭代 // 获取全局并发队列dispatch_queue_t queue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);// 迭代数组NSLog("begin");NSArra…
记一次知乎维权过程——严肃批评某非法引流商
“ 我的文章被人盗版了。” 首先请关注本号的云技术君的马甲赶快取关,这里不欢迎你,你如果再抄我的文章去干坏事,你全家得新冠肺炎。 文章被盗版,被洗稿,且用来给菠菜党引流,我很生气。 好了,…

《代码大全2》读后感czz
经老师推荐,买了一本《代码大全2》,花了近3个月的时间看完了,看完后觉得还有很多值得回味的地方,而且每部分之后作者还推荐了不少经典书籍。所以,作个读书心得。全书的主题是软件构建,关于软件构建问题的方…

09-dispatch_source
dispatch_source 是BSD系内核惯有的kqueue的包装,kqueue 是XNU内核中发生各种事件时,在应用程序编程中执行处理的技术。 CPU 负荷非常小,尽量不占用资源。 dispatch_queue 和dispatch_source dispatch_source 是可以取消的,取…
如何获取boss直聘搜索牛人被屏蔽的姓名
点击上方↑↑↑蓝字[协议分析与还原]关注我们“ 玩玩boss直聘。”最近在用boss直聘,活跃度估计蛮高的。在使用牛人搜索的时候,却遇到了一个问题,就是搜出的牛人姓名是被屏蔽的,让我很是焦虑,虽然知道这种设计是直聘推广…

【Python之路】第二篇--初识Python
Python简介 Python可以应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域。目前业内几乎所有大中型互联网企业都在使用Python,如:Youtube、Dropbox、BT、Quora(中国知乎&…