锁定objective-c中的语句以进行原子访问

时间:2014-08-11 11:24:19

标签: ios objective-c multithreading thread-safety

我试图以原子方式执行以下一组语句

            [inspectionLiteApi setBusinessObject:inspectionSourceObjectApi];
        if (![inspectionSourceObjectApi.inspectionLites containsObject:inspectionLiteApi])
            [inspectionSourceObjectApi addInspectionLitesObject:inspectionLiteApi];

可以从多个线程调用这些语句。但我希望每个线程以原子方式访问它们。什么是正确的方法。我搜索了NSLock,但使用NSLock有以下问题:

  

警告:NSLock类使用POSIX线程来实现其锁定   行为。在向NSLock对象发送解锁消息时,您必须这样做   确保该消息是从发送该消息的同一线程发送的   初始锁定消息。解锁来自不同线程的锁可以   导致未定义的行为。

关于

的使用

dispatch_semaphore_create

dispatch_semaphore_signal

dispatch_release

我无法理解如何使用它们。任何人都可以指导我吗?

0 个答案:

没有答案