如何创建和管理串行后台线程

mkc842

我的应用程序必须在云数据库和核心数据之间进行大量同步,并且这种同步发生在各种方法中。我使用简单的后台线程执行此操作:

dispatch_queue_t backgroundThread = dispatch_queue_create("background thread", NULL);

dispatch_async(backgroundThread, ^{ ...

但是,如果我在应用程序中做得太快,可能会同时发生不同的同步任务,这可能会导致意外的结果。

因此,我只想在一个线程上串行执行所有同步任务。每当需要执行同步任务时,我都希望将其分派到专用线程,直到该线程完成所有先前提交的任务后才执行。我该如何处理?具体来说...

  1. 我应该如何实例化我的后台串行线程?
  2. 我是否应该采取措施在应用程序的生命周期内保留它,或者-不确定是否存在问题-让它在不使用时释放,然后重新创建?
  3. 我如何从各种方法/对象中引用/调度它?

我无法找到直接解决这种情况的答案。这个(使用单个共享的后台线程进行iOS数据处理?)接近了,但是回避了。

谢谢你的时间。

组合的

通过这样的静态函数访问队列:

static dispatch_queue_t my_serial_queue() {

    static dispatch_queue_t s_serial_queue;
    static dispatch_once_t s_done;
    dispatch_once(&s_done, ^{s_serial_queue = dispatch_queue_create("com.app.my_queue_name", DISPATCH_QUEUE_SERIAL);});
    return s_serial_queue;
}

然后像这样使用它...

dispatch_sync(my_serial_queue(), ^{
    //do something here
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建和管理用户?

来自分类Dev

如何创建和管理用户?

来自分类Dev

如何创建和管理大型CSS项目?

来自分类Dev

如何在JavaScript中创建后台线程

来自分类Dev

如何在Haskell中创建和杀死线程列表?

来自分类Dev

从线程创建后台作业

来自分类Dev

如何创建和管理多体系结构PPA?

来自分类Dev

如何创建和管理多体系结构PPA?

来自分类Dev

如何在C#中创建和管理按钮矩阵

来自分类Dev

如何使用Terminal创建和管理.txt文件

来自分类Dev

C++ Boost 示例:创建和管理线程(编译错误)

来自分类Dev

如何在Android上创建在后台运行的线程

来自分类Dev

如何创建NSMetaDataQuery并在后台线程上获取结果?

来自分类Dev

如何创建NSMetaDataQuery并在后台线程上获取结果?

来自分类Dev

节点后台线程-这些线程何时创建?

来自分类Dev

如何在后台使用后台进程和警报管理器创建通知消息?

来自分类Dev

在UI线程上创建和启动任务

来自分类Dev

在C ++中创建和使用线程

来自分类Dev

创建和管理Log.txt文件

来自分类Dev

Linux交换文件的创建和管理

来自分类Dev

使用 vifm 创建和管理文件列表

来自分类Dev

python asyncio,如何从另一个线程创建和取消任务

来自分类Dev

如何使用多线程来创建和提取tar.xz

来自分类Dev

如何在Spring Batch管理员UI中创建和部署Spring Batch作业

来自分类Dev

我应该如何处置由MarshalByRefObject创建和管理的服务器?

来自分类Dev

基本知识:如何在Prolog中创建和管理列表?

来自分类Dev

如何利用Azure AD B2C通过REST API创建和管理用户?

来自分类Dev

如何使用SQLite-Windows Phone 8创建和管理两个或更多表?

来自分类Dev

Prestashop 1.6:如何使用管理控制器创建和提交自定义表单

Related 相关文章

  1. 1

    如何创建和管理用户?

  2. 2

    如何创建和管理用户?

  3. 3

    如何创建和管理大型CSS项目?

  4. 4

    如何在JavaScript中创建后台线程

  5. 5

    如何在Haskell中创建和杀死线程列表?

  6. 6

    从线程创建后台作业

  7. 7

    如何创建和管理多体系结构PPA?

  8. 8

    如何创建和管理多体系结构PPA?

  9. 9

    如何在C#中创建和管理按钮矩阵

  10. 10

    如何使用Terminal创建和管理.txt文件

  11. 11

    C++ Boost 示例:创建和管理线程(编译错误)

  12. 12

    如何在Android上创建在后台运行的线程

  13. 13

    如何创建NSMetaDataQuery并在后台线程上获取结果?

  14. 14

    如何创建NSMetaDataQuery并在后台线程上获取结果?

  15. 15

    节点后台线程-这些线程何时创建?

  16. 16

    如何在后台使用后台进程和警报管理器创建通知消息?

  17. 17

    在UI线程上创建和启动任务

  18. 18

    在C ++中创建和使用线程

  19. 19

    创建和管理Log.txt文件

  20. 20

    Linux交换文件的创建和管理

  21. 21

    使用 vifm 创建和管理文件列表

  22. 22

    python asyncio,如何从另一个线程创建和取消任务

  23. 23

    如何使用多线程来创建和提取tar.xz

  24. 24

    如何在Spring Batch管理员UI中创建和部署Spring Batch作业

  25. 25

    我应该如何处置由MarshalByRefObject创建和管理的服务器?

  26. 26

    基本知识:如何在Prolog中创建和管理列表?

  27. 27

    如何利用Azure AD B2C通过REST API创建和管理用户?

  28. 28

    如何使用SQLite-Windows Phone 8创建和管理两个或更多表?

  29. 29

    Prestashop 1.6:如何使用管理控制器创建和提交自定义表单

热门标签

归档