iOS Objective-c 已同步

iOS Objective-c synchronized

In Java 如果我在一个方法中有关键字synchronized,它会阻止同时被多个线程执行,无论是哪个线程:

public synchronized void doSomething() {
  //synchronous code here
}

在 objective-c 如果这样做,我会得到相同的结果吗?

-(void)doSomething{
    @synchronized (self) {
       //synchonous code here
    }
}

是的,但要注意。

@synchronized指令创建互斥锁——防止大括号内的代码被不同线程同时执行。需要注意的是,它使用传递给它的对象作为唯一标识符来区分受保护的块。因此,如果您在两种不同的方法中使用 @synchronized(self),这两种方法将无法同时被不同的线程执行(因为它们共享相同的标识符(在本例中为 self))。