objective-c - @synchronized 锁定 iVar 和/或属性?

标签 objective-c ios thread-safety synchronized nslock

<分区>

Possible Duplicate:
What does @synchronized() do?

我想知道 @synchronized 的真正作用以及什么最适合我的应用程序。

我有一个 NSMutableArray,我将在后台线程中改变它并在前台线程中访问它。如果这意味着我可以从背景突变中获取更新的值,如果我在改变它的内容时访问数组,我希望稍微暂停访问数组。但是,我不是 100% 确定 NSLock@synchronized 具体是如何工作的。

如果那不可能,是否可以改变数组的副本,完成后,在设置副本的内容时锁定属性/实例变量,以卡住任何访问器调用?

基本上,@synchronized(myArray) 是否会卡住任何访问器调用(让调用挂起直到锁释放然后执行)?

此外,是否可以使用 NSLock 锁定实例变量或属性?据我所知,它似乎只锁定代码块。

最佳答案

Basically, will the @synchronized(myArray) freeze any accessor calls (have the call hang 
until the lock lets up and then execute)?

不会,但是如果在调用任何访问器之前,您在数组实例上使用同步指令,它会卡住您的访问器。
如果线程 1 进入您的数组实例上的同步块(synchronized block),并且线程 2 尝试进入同一数组上的同步块(synchronized block),则它必须等待线程 1 从该 block 退出。但是如果您使用 synchronized 指令不同的对象,那么多个线程可以进入同步块(synchronized block)。

关于objective-c - @synchronized 锁定 iVar 和/或属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850264/

相关文章:

.net - 将 ObjectContext 存储在 ASP.NET 中的线程静态变量中是否安全?

ios:onclick tableviewcell 如果 nsuserdefaults 存在转到 View Controller ,否则转到另一个 View Controller

ios - 如何在将其组件之一移动到其边界附近时向上/向下滚动 UICollectionView?

iphone - 如何对 UIImage 进行去饱和处理?

ios - 使用自动布局(以编程方式)水平对齐 UIButton

java - 使用两个线程一次打印一个字母和数字

ios - 过度释放一个对象,应用程序不会崩溃

ios - 通过iOS将实时视频流式传输到Facebook

ios - 在 UIWebView 中查看 PDF

c++ - 为什么 std::condition_variable 采用 unique_lock 而不是 lock_guard?