2014-05-22 24 views
0

我有一個NSMutableSet的對象,我在主線程上的幾個點突變。有時候,這個集合將在後臺線程上枚舉。在使用一堆布爾變量來管理狀態之前,是否有一種好的方法可以使任何變異等待,如果這個變量集合正在枚舉?如何阻止NSSet在其他地方被枚舉時發生變異?

在此先感謝。

回答

1

NSMutableSet不是線程安全的。你不能破解它是線程安全的。

如果你想要一個副本不會在後臺進行檢查,那麼在主隊列上取一個copy並將其傳遞回去。這比任何其他方法都快很多。

否則,你將不得不在一個互斥體中包含對它的所有訪問。這套設備本身將是最直接的方式。

+2

但請注意,即使單個枚舉操作受鎖保護,通常也不能在變異對象上使用「快速枚舉」。必須使用某種形式的顯式枚舉,或者整個「快速枚舉」循環的持續時間必須鎖定。 –

相關問題