Possible Duplicate:
What does @synchronized() do?


我有一个关于@synchronized真正起作用以及对我的应用程序最有效的问题。

我有一个NSMutableArray,我将在后台线程中进行变异并在前景线程中进行访问。我希望对访问数组有一点把握,如果这意味着我可以从背景突变中获取更新的值,并且可以在对数组内容进行突变的同时访问它。但是,我不确定NSLock@synchronized的具体工作方式是否为100%。

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

基本上,@synchronized(myArray)是否会冻结任何访问者调用(调用会一直挂起,直到锁松开然后执行)?

另外,是否可以使用NSLock锁定实例变量或属性?从我所看到的来看,它似乎只能锁定代码块。

最佳答案

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

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

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

10-13 04:34