[英]CoreData: would it be safe using NSConfinementConcurrencyType and dispatch all operations using this context on a serial dispatch queue?
從字面上看,這種並發類型需要特定的線程,但是使用串行隊列會更容易,但是在串行調度隊列上使用NSConfinementConcurrencyType並發類型的上下文是否安全?
不,擁有串行隊列並不能保證操作將在同一線程上執行:
並發編程指南指定
串行隊列(也稱為專用調度隊列)按添加到隊列的順序一次執行一個任務。 當前執行的任務在分派隊列管理的不同線程(隨任務的不同而不同)上運行。 串行隊列通常用於同步對特定資源的訪問。
您為什么不只使用NSPrivateQueueConcurrencyType? 這將使您的代碼更清潔,線程更安全。 從初始化上下文的塊之外的其他位置訪問上下文時,只需要調用-performBlock:
或-performBlockAndWait:
。
只要您確定只將隊列與上下文一起使用,是的,那完全沒問題。
Core Data並不關心線程,而是關心並發訪問。 如果序列化訪問,則很安全,但是您選擇這樣做。 您可以使用NSRecursiveLock
或信號量或任何適合您的方法。
請注意,較新的並發模型是基於隊列的。 NSPrivateQueueConcurrencyType
不能保證始終在同一線程上執行操作,即使您使用performBlock:
它們發生在專用隊列上,並且可能在不同時間在不同線程上運行。 如果您可以自己管理隊列和訪問權限,足以自己完成此操作,則這樣做是合理的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.