【问题标题】:Mutex in Obj-c / CocoaObj-c / Cocoa 中的互斥锁
【发布时间】:2012-07-05 16:01:42
【问题描述】:

我对多线程编程和可可还很陌生。

我需要一个锁来访问/修改NSMutableArray iVar。最简单的方法是什么?

当我在这里的时候,你们有一些关于使用 Obj-c/Cocoa 进行多线程编程的读物吗? 谢谢。

【问题讨论】:

    标签: objective-c multithreading cocoa locking mutex


    【解决方案1】:

    使用@synchronized 块:

    @synchronized(MyArray)
    {
        // thread safe code
    }
    

    Xcode 有时无法识别此块,但相信我,它有效!

    更多信息可以阅读this文章。

    【讨论】:

      【解决方案2】:

      另一种方法是使用 GCD 和串行队列。

      对于您的 NSArray 属性,写入使用私有串行队列的访问器。设置并从后备存储中获取值。由于串行队列是先进先出的,并且将顺序运行块,这提供了对属性的线程安全访问。

      【讨论】:

      • 你能举个例子更明确一点吗?谢谢!
      • 类似 __block id val = nil; dispatch_sync(aQueue, ^{ val = [array objectAtIndex:index]; });获取一个值,然后 dispatch_sync(aQueue, ^{ [array addObject:obj]; });为二传手。
      • 小心dispatch_sync!如果从当前队列调用,会导致死锁。
      • 无论如何,您都不会 dispatch_sync 到当前队列进行序列化。您可以为此目的将 dispatch_sync 放到一个专用队列中。
      猜你喜欢
      • 2022-07-31
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 2011-01-21
      • 2011-08-10
      • 1970-01-01
      • 1970-01-01
      • 2015-09-10
      相关资源
      最近更新 更多