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

时间:2014-01-29 03:44:57

标签: ios multithreading

我的应用程序必须在云数据库和核心数据之间进行大量同步,这种情况会发生在各种方法中。我使用简单的后台线程来做到这一点:

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

dispatch_async(backgroundThread, ^{ ...

但是,如果我在应用程序中执行的操作太快,则可能会同时执行不同的同步任务,这可能会导致意外结果。

因此,我想在一个线程上连续执行所有同步任务。每当我需要执行同步任务时,我想将它分派给专用线程,在该线程完成所有先前提交的任务之前不要执行。我应该如何管理?具体地说...

  1. 我应该如何实例化我的后台串行线程?
  2. 我应该采取措施在应用程序的生命周期内保留它,或者 - 不确定这是否是一个问题 - 让它在不使用时释放然后重新创建它?
  3. 如何从各种方法/对象中引用它/发送给它?
  4. 我无法找到直接解决这种情况的答案。这一个(Using a single shared background thread for iOS data processing?)接近了,但回避了。

    感谢您的时间。

1 个答案:

答案 0 :(得分:3)

通过如下静态函数访问队列:

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
});