【发布时间】:2018-08-31 05:47:42
【问题描述】:
当我运行 TSan 工具时,我的代码中出现了竞争条件。由于同时从不同的队列和线程访问了相同的代码,这就是为什么我不能使用串行队列或屏障,因为队列只会阻止访问共享资源的单个队列而不是其他队列。
我使用objc_sync_enter(object) | objc_sync_exit(object) 和锁定NSLock() or NSRecursiveLock() 来保护共享资源,但这些也不起作用。
当我在 Objective C 中使用 @synchronized() 关键字来保护共享资源时,它可以正常工作,并且在特定代码块中我没有遇到竞争条件。
那么,由于我们不能在 Swift 语言中使用 @synchronized() 关键字,因此在 Swift 中保护数据的替代方法是什么。
【问题讨论】:
-
self.moments还有哪些地方被访问了? -
已经从不同的类访问过。
-
尝试发送一些标志:D
标签: ios swift concurrency