0

从字面上看,这种并发类型需要一个特定的线程,但是使用串行队列会更容易,但是在串行调度队列上使用具有 NSConfinementConcurrencyType 并发类型的上下文是否安全?

4

2 回答 2

0

不,拥有串行队列并不能保证操作将在同一个线程上执行:

并发编程指南指定

串行队列(也称为私有调度队列)按添加到队列的顺序一次执行一项任务。当前正在执行的任务在由调度队列管理的不同线程上运行(可能因任务而异)。串行队列通常用于同步对特定资源的访问。

为什么不直接使用 NSPrivateQueueConcurrencyType?它将使您的代码更清洁和线程安全。您只需要调用-performBlock:-performBlockAndWait:在从初始化上下文的块以外的其他地方访问上下文时。

于 2013-06-20T08:33:18.860 回答
0

只要你确定你只使用上下文的队列,是的,这完全没问题。

Core Data 并不关心线程,而是关心并发访问。如果你序列化访问,你是安全的,但是你选择这样做。你可以使用NSRecursiveLock或信号量或任何适合你的东西。

请注意,较新的并发模型是基于队列的。NSPrivateQueueConcurrencyType保证操作总是在同一个线程上执行,即使您使用performBlock:. 它们发生在私有队列上,并且可能在不同时间在不同线程上运行。如果您可以很好地管理您的队列和访问权限以自己完成此操作,那么这样做是合理的。

于 2013-06-20T16:43:38.050 回答