为了能够判断当前queue是否是之前创建的queue,

我们可以利用dispatch_queue_set_specific和dispatch_get_specific给queue关联一个context data,

后面再利用这个标识获取到context data。

如果可以获取到说明当前上下文是在自己创建的queue中,如果不能获取到context data则表示当前是在其他队列上。

    NSString *queueKey = @"queueKey1";
dispatch_queue_t queue = dispatch_queue_create("testQueue", DISPATCH_QUEUE_CONCURRENT);
dispatch_queue_set_specific(queue, (__bridge const void * _Nonnull)(queueKey)
, &queueKey, NULL); NSLog(@"1.当前线程:%@ 队列:%@", [NSThread currentThread], dispatch_get_current_queue()); if (dispatch_get_specific((__bridge const void * _Nonnull)(queueKey))) {
NSLog(@"2.当前线程:%@ 队列:%@", [NSThread currentThread], dispatch_get_current_queue());
}else{
NSLog(@"3.当前线程:%@ 队列:%@", [NSThread currentThread], dispatch_get_current_queue());
} dispatch_sync(queue, ^{ if (dispatch_get_specific((__bridge const void * _Nonnull)(queueKey))) {
NSLog(@"4.当前线程:%@ 队列:%@", [NSThread currentThread], dispatch_get_current_queue());
}else{
NSLog(@"5.当前线程:%@ 队列:%@", [NSThread currentThread], dispatch_get_current_queue());
}
});

输出信息

2018-02-13 16:44:13.977719+0800 CGD[14596:276910] 1.当前线程:<NSThread: 0x604000260180>{number = 1, name = main} 队列:<OS_dispatch_queue_main: com.apple.main-thread>

2018-02-13 16:44:13.977900+0800 CGD[14596:276910] 3.当前线程:<NSThread: 0x604000260180>{number = 1, name = main} 队列:<OS_dispatch_queue_main: com.apple.main-thread>

2018-02-13 16:44:13.978047+0800 CGD[14596:276910] 4.当前线程:<NSThread: 0x604000260180>{number = 1, name = main} 队列:<OS_dispatch_queue: testQueue>

GCD的Queue-Specific的更多相关文章

  1. gcd的queue与group

    queue相当于事件处理机制里的事件池:只是任务池: 线程作为事件处理的实施者,由线程池从任务池中获取任务进行调度派发: group相当与工作组,按照任务的相关性对任务进行组织.

  2. GCD详解

    什么是GCD? Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像 NSOperationQueue,他们都允 ...

  3. Grand Central Dispatch (GCD)

    Grand Central Dispatch (GCD) Reference Grand Central Dispatch (GCD) comprises language features, run ...

  4. iOS 并行编程:GCD Dispatch Sources

    1 简介 dispatch source是一种用于处理事件的数据类型,这些被处理的事件为操作系统中的底层级别.Grand Central Dispatch(GCD)支持如下的dispatch sour ...

  5. ios之gcd浅析

    A.普通的GCD异步运行与主线程更新写法: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^ ...

  6. 什么是gcd

    概述 我将分四步来带大家研究研究程序的并发计算. 第一步是主要的串行程序,然后使用GCD把它并行计算化.假设你想顺着步骤来尝试这些程序的话,能够下载源代码. 注意.别执行imagegcd2.m,这是个 ...

  7. 深入GCD(五):资源竞争

    概述我将分四步来带大家研究研究程序的并发计算.第一步是基本的串行程序,然后使用GCD把它并行计算化.如果你想顺着步骤来尝试这些程序的话,可以下载源码.注意,别运行imagegcd2.m,这是个反面教材 ...

  8. 玩转iOS开发:iOS中的GCD开发(三)

    上一章, 我们了解到了GCD里的一些队列和任务的知识, 也实践了一下, 同时我们也对主队列的一些小情况了解了一下, 比如上一章讲到的卡线程的问题, 如果没有看的朋友可以去看看玩转iOS开发:iOS中的 ...

  9. AFNetworking到底做了什么

    写在开头: 作为一个iOS开发,也许你不知道NSUrlRequest.不知道NSUrlConnection.也不知道NSURLSession...(说不下去了...怎么会什么都不知道...)但是你一定 ...

  10. iOS 1-2年经验面试参考题

    Model层: 数据持久化存储方案有哪些? 沙盒的目录结构是怎样的?各自一般用于什么场合? SQL语句问题:inner join.left join.right join的区别是什么? SQLite的 ...

随机推荐

  1. 【SDUT】2019SDUTACM第一次选拔赛 F- X的追求道路

    Problem Description X在大家的帮助下终于找到了一个妹纸,于是开始了漫漫的追求之路,那么大家猜一猜X能不能追的上呢? X初始对妹纸有一个心动值,妹纸对X有一个好感值,在追求时发生的的 ...

  2. JPA的entityManager的find方法与getReference方法的区别

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  3. iOS-基于TCP连接<Scoket-客户端>

    一:前言(本文为TCP客户端) TCP首先要服务器开放一个端口 然后客户端去连接服务端的IP地址和端口号 连接成功之后再进行数据传输 要经历三次握手 二:代码在GitHub 1.需要的工具类 自行下载 ...

  4. 框架用多了真的会死人的,spring-cloud全家桶与mybitais 集成完整示例(附下载)

    ​ 题外话: 看到这一长串包含各种技术名词的标题,一路走来感觉研发深深的被各种框架给绑架了,从我们刚出生最简单的jsp,servlet打天下,到spring mvc的盛行,再到现在spring-boo ...

  5. ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/itsdangerous' Consider using the `--user` option or check the permissions

    近期练习flask写个blog, 安装flask扩展时 pip install Flask-WTF 报ERROR: Could not install packages due to an Envir ...

  6. [靶场实战]:SQL注入-显错注入

    SQL注入的本质:就是将用户输入的数据当作代码带入执行. 注入条件: 1.用户能控制输入 2.能够将程序原本执行的代码,拼接上用户输入的数据进行执行 首先检查是否存在注入点 Rank1: 构造语句 ? ...

  7. kubernets过滤pod标签(labels)

    版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明. 本文地址:https://www.cnblogs.com/wannengachao/p/12074399.html 1.查看p ...

  8. Centos7更新阿里云的yum源

    1.进入yum文件夹 cd /etc/yum.repos.d/ 2.下载阿里云源 wget "http://mirrors.aliyun.com/repo/Centos-7.repo&quo ...

  9. RabbitMQ学习笔记(三、生产者与消费者)

    目录: 细说交换器 细说队列 发送消息 消费消息 确认与拒绝 细说交换器: 1.方法: public AMQP.Exchange.DeclareOk exchangeDeclare(String ex ...

  10. idea tomcat debug不能启动的问题

    显示:Connected to the target VM, address: '127.0.0.1:54692', transport: 'socket' 其实原因是没调整好面板.晕 ...