在iOS中使用序列化目标队列用于并发队列

时间:2015-06-17 12:02:39

标签: ios concurrency queue

我正在阅读这篇优秀的博文 (http://www.humancode.us/2014/08/14/target-queues.html) iOS中的目标线程我不禁想知道为什么我们需要这样的机制。在该示例中,我们为自定义并发队列指定了序列化目标队列。我们不能通过在序列化队列中执行原始并发队列中的块来实现相同的目的吗?

为并发队列设置序列化目标队列是什么意思????

1 个答案:

答案 0 :(得分:1)

如果我说得对,你就会问为什么有人会在并发队列上启动串行任务。

如果大多数具有某些资源的任务可以同时执行(也就是同时执行),则需要这种行为,但是某些任务本质上与其他任务同时执行是不安全的。

最常见的例子是读者/作家问题。例如,您在这里访问文件系统的某些资源。即使是从不同的线程中读取它也是可以的 - 每个读者都能得到它所需要的。但是必须更新该文件的内容。在有人阅读时修改它会导致不可预测的结果 - 读者无法保证获得正确的,预期的信息(部分来自旧版本,部分来自新版本)。更糟糕的是 - 可能有两个编写器(如果文件内容由应用程序用户和一些中央存储器通过网络更改) - 结果将是两个版本的一些疯狂混合(实际上,它现在甚至可能已损坏)

每个作者必须等到所有其他任务都执行(没有人读,没有人写),并且每个读者要等到没有写任务(没有人写,不管读者多少)< / p>

维基百科对此有一篇很好的文章。我还没有遇到任何其他需要这种情况的实际情况,但我相信还有更多这样的情况。

希望它能回答你的问题