1.gcd

fmdb使用了gcd,它是通过 建立系列化的G-C-D队列 从多线程同时调用调用方法,GCD也会按它接收的块的顺序来执行。

fmdb使用的是dispatch_sync,多线程调用a serialized queue,gcd会在接收块的线程执行,并阻塞其他线程。

使用FMDatabaseQueue 及线程安全
在多个 线程中同时使用一个FMDatabase实例是不明智的。现在你可以为每个线程创建一个FMDatabase对象。 不要让多个线程分享同一个实例,它无法在多个线程中同时使用。 若此,坏事会经常发生,程序会时不时崩溃,或者报告异常,或者陨石会从天空中掉下来砸到你Mac Pro.  总之很崩溃。所以,不要初始化FMDatabase对象,然后在多个线程中使用。请使用 FMDatabaseQueue,它是你的朋友而且会帮助你。以下是使用方法:
FMDatabaseQueue  后台会建立系列化的G-C-D队列,并执行你传给G-C-D队列的块。这意味着 你从多线程同时调用调用方法,GDC也会按它接收的块的顺序来执行。谁也不会吵到谁的脚 ,每个人都幸福。

Although you should add tasks asynchronously whenever possible, there may still be times when you need to add a task synchronously to prevent race conditions or other synchronization errors. In these instances, you can use the dispatch_sync and dispatch_sync_f functions to add the task to the queue. These functions block the current thread of execution until the specified task finishes executing.

这和传统的线程很相似。在《unix network programming volume 2》中,介绍了大量的同步方法。

Part 3. Synchronization
7. Mutexes and Condition Variables
8. Read-Write Locks
9. Record Locking
10. Posix Semaphores
11. System V Semaphores

如果使用dispatch_async 调用线程不会阻塞。

When you add a block object or function to a queue, there is no way to know when that code will execute. As a result, adding blocks or functions asynchronously lets you schedule the execution of the code and continue to do other work from the calling thread. This is especially important if you are scheduling the task from your application’s main thread—perhaps in response to some user event.

2.NSOperationQueue

NSOperationQueue  setMaxConcurrentOperationCount: 方法可以配置 operation queue 的最 大并发操作数量。设为 1 就表示 queue 每次只能执行一个操作。

NSOperationQueue 与dispatch_sync 的区别是NSOperationQueue会创建一个线程。并在这个线程里执行。

也就是说:多线程调用 addOperation: 方法添加一个 operation 到 queue,所有的线程都会立即返回,NSOperationQueue的线程执行完后,会在NSOperationQueue的线程调用block。

虽然 NSOperationQueue 类设计用于并发执行 Operations,你也可以 强制单个 queue 一次只能执行一个 Operation。 setMaxConcurrentOperationCount: 方法可以配置 operation queue 的最 大并发操作数量。设为 1 就表示 queue 每次只能执行一个操作。不过 operation 执行的顺序仍然依赖于其它因素,像操作是否准备好和优先级 等。因此串行化的 operation queue 并不等同于 GCD 中的串行 dispatch queue。

原文:http://www.cnblogs.com/javastart/p/4248290.html

转载于:https://www.cnblogs.com/javastart/p/4248290.html

iOS并发编程指南之同步相关推荐

  1. IOS并发编程指南:Dispatch Queue任务执行与Dispatch Source

    导读: 本文为读<Concurrency Programming Guide>笔记第三篇,在对OS X和iOS应用开发中实现任务异步执行的技术.注意事项.Operation与Dispatc ...

  2. iOS并发编程指南(3)

    Dispatch Sources 现代系统通常提供异步接口,允许应用向系统提交请求,然后在系统处理请求时应用可以继续处理自己的事情.Grand Central Dispatch正是基于这个基本行为而设 ...

  3. Java7并发编程指南——第三章:线程同步辅助类

    Java7并发编程指南--第三章:线程同步辅助类 @(并发和IO流) Java7并发编程指南第三章线程同步辅助类 思维导图 项目代码 思维导图 项目代码 GitHub:Java7Concurrency ...

  4. Java7并发编程指南——第二章:线程同步基础

    Java7并发编程指南--第二章:线程同步基础 @(并发和IO流) Java7并发编程指南第二章线程同步基础 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCo ...

  5. Java 7 并发编程指南

    原文是发表在并发编程网上翻译后的 <Java 7 并发编程指南>,这里对其中的目录做个更加详细的描述,并且写出了重点说明,方便日后快速查阅.建议仔细查看每节的代码实现,非常具有参考价值.可 ...

  6. 我所理解的 iOS 并发编程

    作者:bool周 原文链接:我所理解的 iOS 并发编程 无论在哪个平台,并发编程都是一个让人头疼的问题.庆幸的是,相对于服务端,客户端的并发编程简单了许多.这篇文章主要讲述一些基于 iOS 平台的一 ...

  7. python多线程并发编程技术_同步线程 - Python并发编程教程™

    线程同步可以定义为一种方法,借助这种方法,可以确信两个或更多的并发线程不会同时访问被称为临界区的程序段. 另一方面,正如我们所知道的那样,临界区是共享资源被访问的程序的一部分. 因此,同步是通过同时访 ...

  8. Java7并发编程指南——第八章:测试并发应用程序

    Java7并发编程指南--第八章:测试并发应用程序 @(并发和IO流) Java7并发编程指南第八章测试并发应用程序 思维导图 项目代码 思维导图 项目代码 GitHub:Java7Concurren ...

  9. Java7并发编程指南——第七章:定制并发类

    Java7并发编程指南--第七章:定制并发类 @(并发和IO流) Java7并发编程指南第七章定制并发类 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCook ...

最新文章

  1. Spring Boot 2.x整合Quartz
  2. ​基于BCI的现代神经反馈有助于认知增强
  3. 如何使linux中java支持中文
  4. /etc/passwd 文件详解
  5. 按键中断异步通知实现
  6. pat 乙级 1033 旧键盘打字(C++)
  7. 如何理解面向过程和面向对象?
  8. Gmail有充分理由启用SSL加密会话
  9. linux基础命令(总结)
  10. ONAP如何将Open-O和ECOMP数百万行代码合并?
  11. jsp与servlet的区别与联系
  12. c语言注释符的作用有哪两种,C语言编程的注释符号是?
  13. 史上最强之《Pyqt》写游戏
  14. 【小程序开发】uniapp引入iconfont图标及使用方式
  15. ffplay控制音量方法
  16. 欲速则不达--不能忽略情绪
  17. 深度学习第J6周:ResNeXt-50实战解析
  18. 小程序预览报错60001,fail error:109
  19. 解决SELECT list is not in GROUP BY clause and contains nonaggregated column ‘XXX’
  20. 当你热爱现实, 世界就是你照见的自己

热门文章

  1. Linux whoami指令
  2. 支付宝开发中return_url和notify_url的区别分析
  3. python 数学建模、时间戳_python-在matplotlib中绘制Unix时间戳
  4. 屏蔽Crash 提示框的两种方式
  5. 《关键对话》学习总结
  6. 谈谈招聘时我喜欢见到的特质
  7. cadshx字体怎么安装_福利 | 关于PPT字体,你应该知道的几件事...字体包福利见文末...
  8. ab plc软件_回收三菱PLC模块西门子模块AB模块数控模块单片机回收【三菱plc吧】...
  9. STM32 之十 供电系统及内部参照电压(VREFINT)使用及改善ADC参考电压
  10. python自动投递简历_python模拟登录前程无忧,发送简历