我应该将 NSLock 声明为原子的,还是只是浪费时间并且锁本身应该是非原子的?
问问题
376 次
3 回答
2
atomic 使设置和获取属性是原子的,如果不需要以原子方式访问该属性,则可能仅在设置后才从多个线程中读取,那么它就不需要是原子的。或者,该属性多久被调用一次,您需要在循环中经常调用它以注意该属性是原子的效果。你也可以做一些事情,比如在一个方法中只调用一次属性并保持对它的本地引用,以减少它是原子的开销。
对于属性,如果我对它是否需要是原子的有任何疑问,我通常将它们设为原子的,如果这会产生性能问题,我可以稍后再处理,但是由于非原子属性而引入了一个错误, 是更严重的问题。
于 2014-07-10T09:49:59.380 回答
0
想想看。如果你有一个返回 NSLock 的属性,setter会被调用吗?或者这会是一个可怕的错误,会让你的应用程序崩溃吗?
你应该做的是查看@synchronized 并确定它是否比 NSLock 更容易使用。
于 2014-07-10T09:32:18.853 回答
-1
我应该将 NSLock 声明为原子的,还是只是浪费时间并且锁本身应该是非原子的?
默认情况下,Objective-C 中的所有属性都是原子的。所以不需要将 NSLock 声明为原子的。而且这取决于您是否要声明为非原子的要求,基本上非原子属性用于多线程目的。如果您在声明时设置了非原子属性,那么任何其他想要访问该对象的线程都可以访问它并给出关于多线程的结果。因此与原子相比它更快参考原子与非原子之间的差异原子
于 2014-07-10T09:38:22.503 回答