0
我有一個NSMutableSet
的對象,我在主線程上的幾個點突變。有時候,這個集合將在後臺線程上枚舉。在使用一堆布爾變量來管理狀態之前,是否有一種好的方法可以使任何變異等待,如果這個變量集合正在枚舉?如何阻止NSSet在其他地方被枚舉時發生變異?
在此先感謝。
我有一個NSMutableSet
的對象,我在主線程上的幾個點突變。有時候,這個集合將在後臺線程上枚舉。在使用一堆布爾變量來管理狀態之前,是否有一種好的方法可以使任何變異等待,如果這個變量集合正在枚舉?如何阻止NSSet在其他地方被枚舉時發生變異?
在此先感謝。
NSMutableSet
不是線程安全的。你不能破解它是線程安全的。
如果你想要一個副本不會在後臺進行檢查,那麼在主隊列上取一個copy
並將其傳遞回去。這比任何其他方法都快很多。
否則,你將不得不在一個互斥體中包含對它的所有訪問。這套設備本身將是最直接的方式。
但請注意,即使單個枚舉操作受鎖保護,通常也不能在變異對象上使用「快速枚舉」。必須使用某種形式的顯式枚舉,或者整個「快速枚舉」循環的持續時間必須鎖定。 –