我对@synchronized
真正做什么以及什么对我的应用程序最有帮助有疑问。
我有NSMutableArray
我将在后台线程中进行变异并在前台线程中进行访问。我希望能够轻松访问数组,如果这意味着我可以从背景突变中获取更新的值,如果我在改变它的内容时访问数组。但是,我并非100%确定NSLock
和@synchronized
的具体工作方式。
如果这是不可能的,是否可以改变数组的副本,并在完成后,在设置副本的内容时锁定属性/实例变量,以冻结任何访问者调用?
基本上,@ synchronized(myArray)是否会冻结任何访问者调用(让调用挂起,直到锁放开然后执行)?
此外,是否可以使用NSLock锁定实例变量或属性?从我所看到的,它似乎只锁定代码块。
答案 0 :(得分:1)
Basically, will the @synchronized(myArray) freeze any accessor calls (have the call hang
until the lock lets up and then execute)?
不,但如果在调用任何访问者之前它会冻结您的访问者,则使用数组实例上的synchronized指令。
如果线程1进入阵列实例上的同步块,并且线程2尝试进入同一阵列上的同步块,则必须等待线程1从块退出。但是如果您使用synchronized指令不同的对象,然后多个线程可以进入同步块。