簡體   English   中英

CoreData:使用NSConfinementConcurrencyType並在串行分派隊列中使用此上下文分派所有操作是否安全?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM