当2个线程写入同一个对象时会发生什么?

时间:2010-12-06 06:59:48

标签: iphone objective-c

你好 我想知道如果2个线程同时写入一个对象会发生什么? 不确定这应该是线程,我有一个视图的多个副本,每个副本访问和写入nsuserdefault对象。 如果视图的两个或多个副本写入同一对象会发生什么?是否有某种锁定机制?

由于

2 个答案:

答案 0 :(得分:8)

NSUserDefaults类是线程安全的,请参阅documentation。所以是的,里面可能存在某种锁定机制。

答案 1 :(得分:4)

  1. 如果2个线程在没有某种锁定原语的情况下写入同一个对象或结构,则会发生非常糟糕的事情。充其量,你最终会有不一致的状态。最糟糕的是,你的应用程序会崩溃。 NSUserDefaults被定义为线程安全的,所以 - 是的 - 它正在使用某种类型的锁定。

  2. 如果您在不同的线程中运行的视图都写入同一个对象,则表明存在完全不同的问题。 UIKit不是完全线程安全的。大多数UI交互必须从主线程完成。

  3. 文档上有bunch of information