当前位置: 首页 > 编程日记 > 正文

dispatch_queue_create(com.biostime.xxx, DISPATCH_QUEUE_SERIAL)的陷阱

代码

for(int i =0;i<10;i++)
    {
        NSLog(@"i=%d",i);
        dispatch_queue_t mySerialQueue = dispatch_queue_create("com.biostime.xxx", DISPATCH_QUEUE_SERIAL);
        __block int d = i;
        dispatch_async(mySerialQueue, ^{
            NSRunLoop *loop = [NSRunLoop currentRunLoop];
            NSLog(@"%p excute1 i = %d d=%d",loop,i,d);
            d=9;
            NSLog(@"%p excute2 i = %d d=%d",loop,i,d);
        });
        NSLog(@"i=%d",i);
    }

=============

2015-05-29 14:38:49.322 GCDDemo[8558:405173] operation begin
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for begin 0
2015-05-29 14:38:49.322 GCDDemo[8558:405173] mySerialQueue 0x7fb0b051d490
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for end 0
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for begin 1
2015-05-29 14:38:49.322 GCDDemo[8558:405173] mySerialQueue 0x7fb0b05835e0
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for end 1
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for begin 2
2015-05-29 14:38:49.323 GCDDemo[8558:405173] mySerialQueue 0x7fb0b05858b0
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for end 2
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for begin 3
2015-05-29 14:38:49.323 GCDDemo[8558:405208] <NSThread: 0x7fb0b07136e0>{number = 2, name = (null)} === begin
2015-05-29 14:38:49.323 GCDDemo[8558:405209] <NSThread: 0x7fb0b0711f50>{number = 3, name = (null)} === begin
2015-05-29 14:38:49.323 GCDDemo[8558:405207] <NSThread: 0x7fb0b057bde0>{number = 4, name = (null)} === begin
2015-05-29 14:38:49.323 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0509480
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for end 3
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for begin 4
2015-05-29 14:38:49.323 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0516280
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for end 4
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for begin 5
2015-05-29 14:38:49.323 GCDDemo[8558:405215] <NSThread: 0x7fb0b0627e90>{number = 5, name = (null)} === begin
2015-05-29 14:38:49.323 GCDDemo[8558:405216] <NSThread: 0x7fb0b0506f70>{number = 6, name = (null)} === begin
2015-05-29 14:38:49.337 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0610000
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for end 5
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for begin 6
2015-05-29 14:38:49.337 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0623fa0
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for end 6
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for begin 7
2015-05-29 14:38:49.337 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0612e10
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for end 7
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for begin 8
2015-05-29 14:38:49.338 GCDDemo[8558:405173] mySerialQueue 0x7fb0b062a590
2015-05-29 14:38:49.338 GCDDemo[8558:405173] for end 8
2015-05-29 14:38:49.338 GCDDemo[8558:405173] for begin 9
2015-05-29 14:38:49.338 GCDDemo[8558:405217] <NSThread: 0x7fb0b050bbd0>{number = 7, name = (null)} === begin
2015-05-29 14:38:49.338 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0626860
2015-05-29 14:38:49.338 GCDDemo[8558:405173] for end 9
2015-05-29 14:38:49.338 GCDDemo[8558:405218] <NSThread: 0x7fb0b0502770>{number = 8, name = (null)} === begin
2015-05-29 14:38:49.338 GCDDemo[8558:405173] operation end
2015-05-29 14:38:49.338 GCDDemo[8558:405219] <NSThread: 0x7fb0b050e2b0>{number = 9, name = (null)} === begin
2015-05-29 14:38:49.338 GCDDemo[8558:405220] <NSThread: 0x7fb0b05132e0>{number = 10, name = (null)} === begin
2015-05-29 14:38:49.339 GCDDemo[8558:405221] <NSThread: 0x7fb0b04297c0>{number = 11, name = (null)} === begin
2015-05-29 14:38:51.326 GCDDemo[8558:405208] <NSThread: 0x7fb0b07136e0>{number = 2, name = (null)} === end
2015-05-29 14:38:51.326 GCDDemo[8558:405209] <NSThread: 0x7fb0b0711f50>{number = 3, name = (null)} === end
2015-05-29 14:38:51.326 GCDDemo[8558:405207] <NSThread: 0x7fb0b057bde0>{number = 4, name = (null)} === end
2015-05-29 14:38:51.339 GCDDemo[8558:405215] <NSThread: 0x7fb0b0627e90>{number = 5, name = (null)} === end
2015-05-29 14:38:51.339 GCDDemo[8558:405216] <NSThread: 0x7fb0b0506f70>{number = 6, name = (null)} === end
2015-05-29 14:38:51.343 GCDDemo[8558:405217] <NSThread: 0x7fb0b050bbd0>{number = 7, name = (null)} === end
2015-05-29 14:38:51.343 GCDDemo[8558:405220] <NSThread: 0x7fb0b05132e0>{number = 10, name = (null)} === end
2015-05-29 14:38:51.343 GCDDemo[8558:405218] <NSThread: 0x7fb0b0502770>{number = 8, name = (null)} === end
2015-05-29 14:38:51.343 GCDDemo[8558:405221] <NSThread: 0x7fb0b04297c0>{number = 11, name = (null)} === end
2015-05-29 14:38:51.344 GCDDemo[8558:405219] <NSThread: 0x7fb0b050e2b0>{number = 9, name = (null)} === end
 解析:

dispatch_queue_create,用DISPATCH_QUEUE_SERIAL参数创建的是串行队列。那么,只要id相同,返回的都是同一个queue吗?

答案是,错误。

从日志中可以看到,系统生成的10个子线程来执行任务。所以,10个block仍然是并行执行。

label的作用,文档中指出,仅仅为了在debug,instrument,crash report中进行线程标识。

所以,label并不是线程的unique id,而是可以多个线程共用同一个id。

请不要被label所误导。

转载于:https://www.cnblogs.com/so-magic/p/4529388.html

相关文章:

详解Oracle安装与配置.

标签&#xff1a;Oracle 安装 配置 原创作品&#xff0c;允许转载&#xff0c;转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://enetq.blog.51cto.com/479739/316532 一.Oracle 简介. Oracle oracle是殷墟&#xff08;Yin Xu&#…

今天起,在广东可以用百度App一键报警!

今天&#xff0c;百度联合广东省公安厅上线了一款智能小程序&#xff1a;只要打开你手机里的百度 App 就能用了 &#xff01;在110实际接警的过程中&#xff0c;经常会遇到电话并不能很好地表达发生事件的地点等信息的情况&#xff0c;会耽误救援时间。因此&#xff0c;“广东1…

Spring 注解

1. Configuration Configuration用于定义配置类&#xff0c;可替换xml配置文件&#xff0c;被注解的类内部包含有一个或多个被Bean注解的方法&#xff0c;这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描&#xff0c;并用…

Junit的安装与使用

一、简介&#xff1a; JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立&#xff0c;逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。Junit测试是程…

安装 ssh 的公开密匙到 iPhone 上

1). 在Mac的终端上产生密匙 ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/xxxx/.ssh/id_rsa): Created directory /home/xxxx/.ssh. Enter passphrase (empty for no passphrase): xxx Enter same passphrase again…

浏览器关闭事件处理

//有确认退出var msg_unload"您的文章内容还没有进行保存&#xff01;";var unloadConfirm {};unloadConfirm.SetConfirmMsg function(confirmMsg){ window.onBeforeUnload function(event) { event event || window.event; event.returnval…

spring注解--@Bean

Configuration public class KnightConfig {Beanpublic Knight knight(){return new BraveKnight(quest () );}}spring的Bean注解用于告诉方法&#xff0c;产生一个Bean对象&#xff0c;然后把这个Bean对象交给spring管理。注意&#xff1a;产生这个Bean对象的方法Spring只会调…

如何用 Windows Live Writer 和 Word 2013 分别发表博客到Cnblog 和CSDN

ps CSDN 老是505错误&#xff0c;放弃了 为什么会写这篇 最近写博客在 Cnblog 上面写博客&#xff0c; 发现图片不能复制了直接粘贴上&#xff0c;这对于把博客当随手笔记的人来说无疑非常痛苦。求助于博客园&#xff0c;他们让我用 Windows Live Writer 试试。我查了下大家推荐…

JavaScript 事件冒泡简介及应用(转)

http://www.jb51.net/article/21801.htm 一、什么是事件冒泡在一个对象上触发某类事件&#xff08;比如单击onclick事件&#xff09;&#xff0c;如果此对象定义了此事件的处理程序&#xff0c;那么此事件就会调用这个处理程序&#xff0c;如果没有定义此事件处理程序或者事件返…

不改文件名的情况下上传突破

方法不错&#xff0c;首先就是不强制改上传文件名。还有就是上传目录没有执行的权限。 然后用这方法貌似就可以上传到上级可写目录了。 比如抓这是抓的上传数据包: POST /upload/upfile.asp HTTP/1.1Accept: application/x-shockwave-flash, image/gif, image/x-xbitmap, image…

static interface method calls are not supported at language level 1.6

报错解决&#xff08;导入项目时&#xff09; 点击那个红色的小灯泡 下面的那行&#xff1a; set language to … 等待 即可

Objetive-C +load方法研究

load方法的执行时机Objetive-C 的runtime会在一个类的所有方法加载到内存中时调用这个类的load() 方法&#xff0c;因为每个类的方法只是加载一次&#xff0c;所以每个load&#xff08;&#xff09;方法只调用一次。加载一个类的方法会在一个进程启动开始的时候&#xff0c;这个…

HDU3434数学题

纯粹的数学题&#xff0c;题目的意思是给你一组序列&#xff0c;让你能同时改变它的一个子序列&#xff0c;让其子序列的值增加1&#xff0c;或者减少1. 思路的话&#xff0c;就是找其中的数学规律&#xff0c;给你的序列例如是&#xff1a;3,5,1,4,7。先求出其序列的正差和5-3…

python的基本知识点

一.数据类型 1.整数2.浮点数3.字符串4.布尔值:True/False5.空值:None 二.变量 变量名必须是大小写英文、数字和_的组合&#xff0c;且不能以数字开头 三.常量 全部大写的变量名表示常量,python没有一种机制保证常量不能被修改.PI 3.14156 四.特殊的地板除 // // 除法只取结果的…

上传代码到git上的分支(协同开发)

任意位置右键单击 git bash,输入命令如下&#xff1a; git config --global user.name "用户名" &#xff08;用户名就是gitlab上的用户名&#xff0c;我的是名字拼音&#xff09;git config --global user.email "邮箱" &#xff08;注册gitlab时的邮箱&…

Android网络编程系列 一 Socket抽象层

在《Android网络编程》系列文章中&#xff0c;前面已经将Java的通信底层大致的描述了&#xff0c;在我们了解了TCP/IP通信族架构及其原理&#xff0c;接下来我们就开始来了解基于tcp/ip协议层的Socket抽象层。本篇文章将会让我们清楚的了解和学会使用Socket。什么是Socket&…

HDFS的shell和API操作

1. HDFS的shell操作 hadoop version //查看版本 hadoop fs -appendToFile src(Linux中的文件) dest(hdfs目录下的文件) //追加 hadoop fs -cat file(hdfs目录下的文件) //查看文件内容 Hadoop fs -tail file(hdfs目录下的文件) //查看文件末尾1kb的数据…

C#中的问号用法

在看一些国外牛人写的C#代码时&#xff0c;总是看到会有Boolean?、DateTime?这样的类型&#xff0c;以为是一些新的类型&#xff08;该类型变量有一些新的属性和方法&#xff09;&#xff0c;后来经过查找相关的资料&#xff0c;发现原来另有微妙。以下是MSDN中对这个问号的解…

L1-006 连续因子

题目&#xff1a; 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567&#xff0c;其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N&#xff0c;要求编写程序求出最长连续因子的个数&#xff0c;并输出最小的连续因子序列。 输入格式&#xff1a; 输…

Python Data Structures

1. list 2. stack 3. queue 4. tuple 5. sequence 6. set 7. dict #-*- coding: utf-8 -*-# 添加中文注释Created on 2011-4-29test for python data structureauthor: xuqiang###################list##################print("test for list");a [66.25, 333, 333…

【转】 ubuntu12.04更新源

原文网址&#xff1a;http://blog.chinaunix.net/uid-26404477-id-3382633.html 摘 要&#xff1a;本文列出ubuntu 12.04 LTS更新源列表&#xff0c;内容为网友整理&#xff0c;此处为转载。因为我还在重庆读书&#xff0c;所以在设置自己的源列表的时候选择了电子科技大学的更…

Ubuntu 上创建常用磁盘阵列

RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出&#xff0c;最初是为了组合小的廉价磁盘来代替大的昂贵磁盘&#xff0c;同时希望磁盘失效时不会使对数据的访问受损 失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价…

L1-009 N个数求和

题目 本题的要求很简单&#xff0c;就是求N个数字的和。麻烦的是&#xff0c;这些数字是以有理数分子/分母的形式给出的&#xff0c;你输出的和也必须是有理数的形式。 输入格式&#xff1a; 输入第一行给出一个正整数N&#xff08;≤100&#xff09;。随后一行按格式a1/b1 a2/…

我的理解:box-sizing

下面是我在博客园找到的&#xff0c;和我遇见的情况很相似&#xff0c;所以摘抄下来&#xff0c;原文见:http://www.cnblogs.com/charling/p/3635031.html box-sizing语法&#xff1a; box-sizing &#xff1a; content-box || border-box || inherit 参数取值&#xff1a; con…

世界最大规模3D打印混凝土步行桥在上海 落成启用

1月12日&#xff0c;世界最大规模3D打印混凝土步行桥在沪落成启用&#xff0c;人们站在桥体上欢庆该新兴建筑体的诞生。 中新网上海1月13日电 (记者 于俊)一座体态优雅、形似飘带的水泥桥12日横跨于上海宝山智慧湾的小河之上&#xff0c;宣告全球最大规模混凝土3D打印步行桥落成…

idea打开web项目之后一直闪烁

解决办法&#xff1a; 点击&#xff0c; 选择第一个&#xff08;清除缓存并重启&#xff09; 这时Idea会自动重新启动&#xff0c;之后就没有闪烁的状态了。 一开始我选择是第二个&#xff0c;清除无效的缓存&#xff0c;但是并没有起作用。

第十章:控制文件

控制文件管理[大纲] 控制文件的结构  控制文件的复用  控制文件的重建  控制文件的管理一、数据库控制文件控制文件中记载了数据库的物理结构等重要的数据库信息&#xff0c;如数据文件和日志文件信息。控制文件是用 于维护数据库完整性的重要文件。Oracle 正是使用…

UIImage图片拉伸方法

纵观移动市场&#xff0c;一款移动app&#xff0c;要想长期在移动市场立足&#xff0c;最起码要包含以下几个要素&#xff1a;实用的功能、极强的用户体验、华丽简洁的外观。华丽外观的背后&#xff0c;少不了美工的辛苦设计&#xff0c;但如果开发人员不懂得怎么合理展示这些设…

【摘录】GestureDector使用

boolean onDoubleTap(MotionEvent e)解释&#xff1a;双击的第二下Touch down时触发boolean onDoubleTapEvent(MotionEvent e)解释&#xff1a;双击的第二下Touch down和up都会触发&#xff0c;可用e.getAction()区分。boolean onDown(MotionEvent e)解释&#xff1a;Touch …

IDEA新建springboot项目发生错误

idea新建spring boot项目 选择这个默认的Default 之后弹出提示框如下 这个时候首先试一下更换一下网络&#xff0c;我用的是wifi就换成热点&#xff0c;就可以了&#xff0c;是因为网络的问题