1

可能重复:
@synchronized() 做什么?

我有一个关于什么@synchronized真正起作用以及什么最适合我的应用程序的问题。

我有一个NSMutableArray我将在后台线程中变异并在前台线程中访问。如果我在改变它的内容时访问数组,如果这意味着我可以从背景突变中获取更新的值,我希望对访问数组有一点控制。但是,我不能 100% 确定NSLocks 和 s 的@synchronized具体工作方式。

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

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

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

4

1 回答 1

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

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

于 2012-12-12T23:23:32.660 回答